美文网首页程序员YiiFramework
[译]如何在所有控制器的动作之前使用组件

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

作者: 张迪 | 来源:发表于2013-04-24 10:32 被阅读174次

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

    我需要在一个动作前执行一段代码, 但我同样也需要在其他的控制器(不是所有控制器)中执行, 所以我在 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]

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/depttttx.html