控制器是mvc中的C层,主要控制整个后台的逻辑。它联系起M层和V层,即用逻辑控制M层数据的存储,并且传递M层的数据,从而控制V层的数据输出。一开始写cake的时候总是把数据的部分也写在C层里,然后M层显得很精练,只有短短几行代码。不过整个做下来发现将M层变得丰满,而C层只是用来控制逻辑,从而使得C层变得精炼,有助于代码的重用和后面的修改。这也是MVC理念的一个体现。
1.如果你在 AppController 中定义了 $helpers ,记得添加默认的 Html 和 Form 助手,eg: public $helpers = array('Html','Form','Session','Time','Text');这样一句估计都全齐全了;
2.CakePHP 控制器提供了能用来在请求生命周期中插入逻辑的回调:
Controller::beforeFilter()
这个函数在控制器中的每个动作前执行。 它是检验活动会话或用户授权验证的好地方,beforeFilter() 方法在找不到动作时或者脚手架动作执行前,也会执行。
Controller::beforeRender()在控制器动作逻辑之后、视图渲染前调用。这个回调不常用,但是如果你在动作结束前手动调用 render() 时可能会需要它。
Controller::afterFilter()在控制器动作逻辑和渲染完成之后调用。这是运行时执行的最后一个控制器方法。
3.Controller::requestAction(string $url, array $options)
这个函数可以从任何位置调用控制器动作并返回来自动作的返回数据,即返回render后的视图。$url 传递的是一个 CakePHP-relative URL (/controllername/actionname/params)。传递给接收控制器动作的扩展数据是放在 $options 数组中的。或者URL也可以写成富有Cake特色的数组的形式,就像array('controller' => 'xx','action' => 'aa',array() );
4.Controller::loadModel(string $modelClass, mixed $id)
当你需要在一个没有默认模型的控制器中使用模型时,或者在使用一个关联模型时,loadModel 功能很容易就可以实现你的目的。 使用起来很方便,特别是当数据库各种表各种外键错综复杂烦死你的时候。可以直接一句话就可以调用其他的Model进行操作;