热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yii分析8:控制器执行类CAction

Yii控制器基本的执行单位为action,通常情况下,在Controller类中定义一个actionMe的函数,那么当访问me这个action时(参考Yii分析5:路由管理类UrlManager和Yii分析7:runController的执行),会

Yii控制器基本的执行单位为action,通常情况下,在Controller类中定义一个actionMe的函数,那么当访问me这个action时 (参考Yii分析5:路由管理类UrlManager和Yii分析7:runController的执行),会自动执行actionMe方法。在实际的项 目中,如果Controller有多个action,那么如果把所有的action处理逻辑都写在Controller中,那么这个Controller 类会异常的大,不利于后期维护,我们可以通过覆盖actions方法,配置action map把不通action分散到各个类中去处理:

PHP
public function actions(){ return array( ‘action1’=>array( ‘class’=>’path.to.actionclass1’, ‘property’=>’’, ), ‘action2’=>array( ‘class’=>’path.to.actionclass2’, ‘property’=>’’, ), ); }
1
2
3
4
5
6
7
8
9
10
11
12
    public function actions(){  
        return array(  
            ‘action1’=>array(  
                        ‘class’=>’path.to.actionclass1’,  
                        ‘property’=>’’,  
                     ),  
                    ‘action2’=>array(  
                        ‘class’=>’path.to.actionclass2’,  
                        ‘property’=>’’,  
                    ),  
        );  
    }


定义了上述配置数组之后,对于一个名为’deal’的action,Controller会首先去找是否有actionDeal这个方法,如果没有再去判 断actions返回值数组是否有key为deal的值,进而用配置的类来处理,这个action类至少要有一个run方法(不一定要继承CAction 类),来执行相应的处理逻辑,否则会报fatal error。

 

虽然这个action类只要有run方法就可以,不一定要继承CAction类,但是还是推荐大家使用CAction类,一方面保持框架的完整性,一方面不能访问调用他的Controller。CAction的代码很简单:

PHP
//这是一个抽象类 abstract class CAction extends CComponent implements IAction { private $_id; private $_controller; /** * 构造函数,用于父类创建action类,同时将controler作为参数保存在成员中 * @param CController $controller the controller who owns this action. * @param string $id id of the action. */ public function __construct($controller,$id) { $this->_cOntroller=$controller; $this->_id=$id; } /** * @return CController 返回拥有这个action的controller */ public function getController() { return $this->_controller; } /** * @return 返回action的id */ public function getId() { return $this->_id; } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    //这是一个抽象类  
    abstract class CAction extends CComponent implements IAction  
    {  
        private $_id;  
        private $_controller;  
 
        /**
         * 构造函数,用于父类创建action类,同时将controler作为参数保存在成员中
         * @param CController $controller the controller who owns this action.
         * @param string $id id of the action.
         */  
        public function __construct($controller,$id)  
        {  
            $this->_cOntroller=$controller;  
            $this->_id=$id;  
        }  
 
        /**
         * @return CController 返回拥有这个action的controller
         */  
        public function getController()  
        {  
            return $this->_controller;  
        }  
 
        /**
         * @return 返回action的id
         */  
        public function getId()  
        {  
            return $this->_id;  
        }  
    }

推荐阅读
  • 深度兴趣网络在点击率预测中的应用研究
    本文探讨了一种名为深度兴趣网络(Deep Interest Network, DIN)的新方法,该方法通过捕捉用户的历史行为和当前上下文之间的交互来提高点击率预测的准确性。DIN模型不仅考虑了用户的静态偏好,还动态地调整了对不同商品的兴趣权重,从而实现了更加个性化的推荐。 ... [详细]
  • 本文探讨了一个项目中遇到的挑战,即如何通过技术手段解决不同菜单项触发时,跨域IFrame页面的高度自适应问题。通过创建中介页面和利用JavaScript与Cookie机制,实现无缝的用户体验。 ... [详细]
  • 本文详细介绍了在PHP中如何创建新文件以及如何使自定义函数在整个项目中全局可用的方法,包括最新的实践技巧。 ... [详细]
  • 解决Android开发中的TextView难题
    探讨了在Android开发过程中遇到的关于TextView组件的常见问题,特别是如何实现多行文字的跑马灯效果,并提供了初步的解决方案和参考资料。 ... [详细]
  • Only2 Labs 是一家专注于视觉设计的工作室,如果您对当前的设计感到不满,或者急需寻找一个可靠的设计合作伙伴,甚至是您的团队项目需要专业指导,Only2 Labs 都将竭诚为您提供帮助。 ... [详细]
  • 解决phpMyAdmin运行错误:mysqli_init(): 属性访问尚未允许
    本文探讨了在使用phpMyAdmin过程中遇到的mysqli_init()函数错误,并提供了有效的解决方案。 ... [详细]
  • 本文探讨了Windows Presentation Foundation (WPF)如何通过扩展Microsoft Build Engine (MSBuild)来增强其构建能力,特别是在处理WPF特有的任务时。 ... [详细]
  • 本文探讨了在执行SQL查询时遇到的因字符集不同而导致查询结果差异的问题,特别是涉及中文字符时。文章分析了在不同字符集设置下,SQL查询结果的变化,并提供了详细的解决方案。 ... [详细]
  • 本文探讨了如何在JavaScript中调用PHP函数及实现两者之间的有效交互,包括通过AJAX请求、动态生成JavaScript代码等方法。 ... [详细]
  • 深入解析PHP Xdebug的安装与应用
    本文详细介绍了PHP Xdebug的安装步骤及其在PHP开发中的重要作用。Xdebug作为一款强大的调试工具,不仅能够帮助开发者追踪代码执行过程,还能有效提升代码质量和系统性能。 ... [详细]
  • 本文对唐代诗人王建的《泛水曲》进行详细的赏析和翻译,探讨其文学价值及艺术特色。 ... [详细]
  • 探讨《深入理解计算机系统》一书中关于寄存器保存规则的理解难题,特别是调用者保存寄存器的使用与恢复机制。 ... [详细]
  • Node.js中子进程的创建与管理详解
    本文深入探讨了Node.js中如何使用child_process模块来创建和管理子进程,包括exec、spawn和fork三种方法的具体应用及其实现细节。 ... [详细]
  • CGroups: 资源管理和控制
    CGroups(Control Groups)是Linux内核提供的一个功能,旨在限制、记录和隔离进程组使用的物理资源,如CPU、内存和I/O等。它通过精细的资源管理,支持现代容器技术如Docker的资源限制需求。 ... [详细]
  • 灰度共生矩阵是一种用于纹理分析的方法,它通过统计图像中像素对的空间关系来描述纹理特性。该方法能够捕捉到不同纹理模式下灰度级结构的重复出现情况,对于精细和粗糙纹理具有不同的表现。 ... [详细]
author-avatar
书友62908490
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有