我认为这是一个在所有控制器的动作之前执行一些代码的小技巧, 我将告诉你如何去做, 你可能会在你的项目中用到它.
我需要在一个动作前执行一段代码, 但我同样也需要在其他的控制器(不是所有控制器)中执行, 所以我在 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]