大饼先生 2007-7-9 16:46
CakePHP笔记
(一)
重写类AppController的beforeFilter ()方法,可以在调用控制器的Action之前完成beforeFilter()里定义的操作。
相应的,如果重写afterFilter()方法,则可以在调用Action之后完成相应的操作。
扩展AppController的控制器,当view通过表单POST发送数据时,直接可以使用控制器的$data成员变量访问表单数据。
例如:表单如下:
app/views/tests/index.thtml
<form method="POST" action="/tests/testAction">
<?php echo $html->input('Test/id', array('size' => '40'))?>
<?php echo $html->input('Test/name', array('size' => '40'))?>
<input type="submit" value="提交">
</form>
这个表单提供的数据,可以在TestsController类里调用$this->data访问到该表单提交的数据。例如当表单提交的数据为ID:1,NAME:1234,用print_r($this->data)方法来调试输出时,可得到以下结构数组:Array ( [Test] => Array ( [id] => 1 [name] => 1234 ) )
大饼先生 2007-7-15 21:42
关于view、flash
controller中使用全局变量$layout(或者使用$this->setLayout('param')),可以在处理完页面逻辑后(即调用完相应的ACTION后)将页面跳转到/app/views/layout里{$layout}.thtml,而不会再调用到controller的相应view的相应的action页面。但很奇怪的是相应的view和相应的action又必须存在(虽然没用上)。
关于使用layout有两种方法
1)全局定义var $layout='My_layout'。用这种方法定义的话无论页面访问哪个action,处理完页面逻辑后都会跳转到/app/views/layout/My_layout.thtml这个页面。
2)局部定义$this->layout='My_layout'。用这种在action里定义layout的方法只会使当于的action调用My_layout.thtml,该controller里的其它action不受影响。
在view里或者layout里使用View对象的renderElement方法,可以使页面局部调用/app/views/element里相应的element元素。并可以传递参数。具体使用方法可以参看CakePHP_API。
注意调用时要回显,则应使用如下调用方式:
echo $this->renderElement('my_element_name',array('paramName'=>'paramValue'));
controller里如果调用flash方法,将会调用/app/views/layout/flash.thtml,在flash.thtml中可以使用$message变量(即在controller中传入的参数)。
在controller使用$this->render()可以使页面回到相应的view~~
[[i] 本帖最后由 大饼先生 于 2007-7-22 22:46 编辑 [/i]]