[译]如何在所有控制器的动作之前使用组件

我认为这是一个在所有控制器的动作之前执行一些代码的小技巧, 我将告诉你如何去做, 你可能会在你的项目中用到它.

我需要在一个动作前执行一段代码, 但我同样也需要在其他的控制器(不是所有控制器)中执行, 所以我在 protected/components 下创建了一个组件:

Filename: CensoConfig.php
<?php
class CensoConfig extends CApplicationComponent
{
    public function configurar()
    {
        $config = array();
        if (Yii::app()->params['empresa_id'] > 0) {
            $censo_config = Parametro::model()->obtener_parametro('CENSO.CONFIG', Yii::app()->params['empresa_id']);
            if ($censo_config !== false) {
                $config = json_decode($censo_config->parametro, true);
            }
        }
        Yii::app()->params['censo_config'] = $config;
    }
}

下一步,在 protected/config/main.php 文件中引入所有组件,包括 CensoConfig :

// autoloading model and component classes
'import'=>array(
    ... some other files
    'application.components.*',
),

差不多完成了, 在需要使用组件的控制器中使用如下代码:

<?php
class ConsultaController extends Controller
{
   protected function beforeAction($event)
   {
       $conf = new CensoConfig;
       $conf->configurar();
       return true;
   }

你可以使用其他方法达到相同的效果,对你的项目来说, 这不是唯一的方法,也不是最好的方法,但它可以达到效果,希望它对你有用.

[英文原文/ How to use a component before every action of a controller]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,292评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,924评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 针对不需要保险和和家人商量的应对思路,简单剖析如下,特别要注意,所有的提问过程一定要给予客户较多的同理和赞美,才能...
    Martinmqk阅读 330评论 0 0
  • 我们每个人都想成功,都需要不断的提升和完善自己,那提升自己只有一天路,那就是学习,老话说的好:穷人最怕学,其实穷人...
    王春海阅读 154评论 0 2