程序员YiiFramework

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

2013-04-24  本文已影响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]

上一篇 下一篇

猜你喜欢

热点阅读