我想检查我的用户是否可以填写个人资料中的某些字段,然后才能访问任何 Controller 的任何操作。
例如
if(empty(field1) && empty(field2))
{
header("Location:/site/error")
}
在yii1中,我可以在init()函数中的protected \ components \ Controller.php中完成此操作
但是在yii2中,我不确定将代码放在哪里。我无法修改核心文件,但不确定要在高级应用程序的后端执行什么操作才能使其正常工作。
我知道我可以使用beforeAction(),但是我有太多的 Controller 无法做到这一点并跟踪每个 Controller
最佳答案
如果需要在执行每个 Controller 和操作之前执行代码,可以执行以下操作:
1 -将组件添加到组件目录中,例如(MyGlobalClass
):
namespace app\components;
class MyGlobalClass extends \yii\base\Component{
public function init() {
echo "Hi";
parent::init();
}
}
2 -在配置文件的组件数组中添加
MyGlobalClass
组件:'components' => [
'MyGlobalClass'=>[
'class'=>'app\components\MyGlobalClass'
],
//other components
3 -在配置文件的
MyGlobalClass
数组中添加bootstarp
:'bootstrap' => ['log','MyGlobalClass'],
现在,您可以在执行每个操作之前查看
Hi
。请注意,如果您不需要使用
Events
和Behaviors
,则可以使用\yii\base\Object
代替\yii\base\Component
关于yii2 - 在执行任何 Controller 操作之前执行我的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27180059/