在CakePHP里,一个controller用于管理应用程序某一方面的逻辑.大多数情况下,controller被用于管理独立model的逻辑,controller的名字总是复数形式.
每个controller可以包含任意数量的方法(action).
一个action,是controller里的一个独立的方法.这个controller.action对象的方法将被Dispatcher类分发执行.
一.Controller变量
$name
使用这个变量来为类设置正确的遵循驼峰命名法(具体见inflector.php).
$users
在controller使用多个model.
$helpers
使用这个变量来让controller在view里面装载helper.HTML helpers是自动被读取的,但是可以用这个变量来指定其他的helper.
$layout
该变量的值为你想为这个controller使用layout的名字.
$autoRender
将这个变量设为false能让action在render之前自动停止.
$beforeFilter
用于想让一些代码在每次action前被调用执行.
将这个变量设置成一个数组,该数组包含了action.
$components
这个变量用来(定义)装载需要的组件.
二.Controoler的主要方法有:
1.beforeFilter在每个controller ction 调用前执行它.
2.afterFilter在每个 controller action 调用后执行.
3.set(string $var, mixed $value);
这个方法是view从controller得到数据的主要方法.(和struts中form.set()类似,但是没有get(),因为它不像struts中那样是对一全bean操作)
这个方法可以传递任何数据,当调用了set()后,相应的变量就可以在view中访问到.当有多个变量需要set的时候,可以结合compact函数来操作,如:
- $this->set(compact('a','b','c','d',...));
复制代码
4.redirect(string $url)通过此方法来通知用户应该继续访问什么地方.
5.flash(string $message,string $url,int $pause);这个方法将在你的flash页面(app/views/layouts/flash.ctp)上显示提示信息[$messate],停顿[$pause]秒,然后重定向用户到指定的url.
6.paginate()当查询多条数据需要分页时的相关函数,对应的变量和set()视图方法与之类似.
7.validateErrors()返回在一次不成功的保存中生成的错误个数.
8.validate根据一个model预定义的有效性规则验证该model的数据.
9.render(string $action, string $layout, string $file);方法是在controller action结束时自动调用的,输出名字为action的view.也可以在controlle逻辑里的任意位置调用这个方法输出视图.
10.beforeRender
在controller逻辑之后,并且在输出视图之前被调用.
其他在Object类中定义在controller里仍然可用的方法:
requestAction(string $url, array $option);
这个方法可以在任意位置调用某个controler的action并且返回rener后的视图.
可以用requestAction从另一个controller action 获取数据,也可以从另一个controller获取整个输出后的视图.一般不建议这样来调用加载controller,因为这样的加载相当与两次的逻辑调用,相关的组件,helper,view都将加载,无疑,这增加了系统的开销.
log(string $message, int $type=LOG_ERROR);
这个方法用来记录web应用程序里发生的不同事件.
postConditions(array $data, mixed $op, string $bool, boolean $exclusive);
用于将传入的$this->request->data格式化成model条件数组.