如前文所述,动作可以被定义为一个以 action
单词作为前缀命名的方法。而更高级的方式是定义一个动作类并让控制器在收到请求时将其实例化。 这使得动作可以被复用,提高了可复用度。
要定义一个新动作类,可用如下代码:
class UpdateAction extends CAction { public function run() { // place the action logic here } }
为了让控制器注意到这个动作,我们要用如下方式覆盖控制器类的actions() 方法:
class PostController extends CController { public function actions() { return array( 'edit'=>'application.controllers.post.UpdateAction', ); } }
如上所示,我们使用了路径别名 application.controllers.post.UpdateAction
指定动作类文件为 protected/controllers/post/UpdateAction.php
.
通过编写基于类的动作,我们可以将应用组织为模块的风格。例如, 如下目录结构可用于组织控制器相关代码:
protected/ controllers/ PostController.php UserController.php post/ CreateAction.php ReadAction.php UpdateAction.php user/ CreateAction.php ListAction.php ProfileAction.php UpdateAction.php