简单讲完model之后便是controller的使用,如果在/app/下创建了app_controller的话,所有创建的controller都会继承你所创建的controller,一般controller的名字都是名词复数_controller.php,在代码里面便是名词复数Controller的双驼峰写法。如果controller由bake生成的话,便会生成4个方法,查删改插都有。
$this->layout,一般都默认使用default.ctp,如果不从cake/lib里面复制到app/view/layout目录下的话是没有 default.ctp这个文件,复制后系统自动会调用app/view/layout/default.ctp。
说完这些简单的属性,controller每个方法都会调用与其名字相同的view,如果是viewCompany方法=》view_company.ctp
controller类成员有:$name(名词复数,说明这个controller使用哪个model,自动使用名词单数那个model)
$uses如果这个属性显式使用了后,还想使用这个controller默认使用的model就必须要显式声明。
$components 这个属性使用其他组件,方便使用。
$this->pageTitle,在layout中使用这个可以为不同controller调用的view使用title变量。
<?php //echo $title_for_layout;
//$this->pageTitle="title";
?>
$this->layout,一般都默认使用default.ctp,如果不从cake/lib里面复制到app/view/layout目录下的话是没有 default.ctp这个文件,复制后系统自动会调用app/view/layout/default.ctp。
class ProductsController extends AppController {
var $name = 'Products';
var $uses = array('Product','Taxonomy');
function beforeFilter() {
$this->Auth->allow('view');
// parent::beforeFilter();
}
function index() {
$this->Product->recursive = 0;
$this->set('products', $this->paginate());
}
说完这些简单的属性,controller每个方法都会调用与其名字相同的view,如果是viewCompany方法=》view_company.ctp
add、edit的时候,页面会产生$this->data,会自动与页面的form关联,要想更改form提交的数据,使用debug方法传入$this->data参数进行详细了解使用。
其他模型数据保存与插入bake生成的代码都有示例,可以自行参考了解,也可以只保存某个model里面的其中一个字段field,方法为saveField()。
保存后可以使用$this->Session->setFlash()方法来从页面提示处理信息,字符串一般使用__()(ps:两个下划线的方法,是国际化方法来的)。
$this->redirect(array('action' => 'index'))可以跳转到某个方法,如果在该方法是在同一个controller里面,可以省略controller。$this->redirect($this->referer());//自动跳转到回引用页面,写登陆方法的使用这个非常好。
controller方法里面的参数,一般从router.php里面设置,如果默认设置,就自动从方法gj/users(控制器)/view(方法)/arg1/arg2后的按顺序读取arg1、arg2进入方法的参数,最好每个参数在参数列表里都赋值null,以免报错。
beforeFilter这个方法继承app_controller,如果没有显式定义,就不用了。