I would like to check if my user have filled certain fields in his profile before he can access any action of any controller. For example
if(empty(field1) && empty(field2))
{
header("Location:/site/error")
}
In yii1 I could do it in protected\components\Controller.php in init() function But in yii2 I'm not sure where to put my code. I cannot modify core files, but not sure what to do in backend of my advanced application to make it work.
I know I can user beforeAction() but I have too many controllers to do that and to keep track of every controller
Or, https://github.com/yiisoft/yii2/blob/master/docs/guide/security-authorization.md use RBAC, to restrict access to controllers actions one at a time based on rules. Why would you want to restrict access to controller actions based on user fields is beyond me. You will not be able to access anything (including the login form) if you put a restriction there.
Create a new controller
All your controllers should now extend backend\components\Controller and not \yii\web\Controller. with this, you should modify every controller. I would go for this solution.
I believe you might also replace 1 class with another (so no change to any controller necessary), something like
See more details here: http://www.yiiframework.com/doc-2.0/guide-tutorial-yii-integration.html and I took the code from here: https://github.com/mithun12000/adminUI/blob/master/src/AdminUiBootstrap.php
you can put this in your index.php file. However, make sure you document this change very well as somebody that will come and try to debug your code will be totally confused by this.
Just add in config file into $config array:
In case you need to execute a code before every controller and action, you can do like below:
1 - Add a component into your components directory, for example(
MyGlobalClass
):2 - Add
MyGlobalClass
component into your components array in config file:3 - Add
MyGlobalClass
intobootstarp
array in config file:Now, you can see
Hi
before every action.Please note that, if you do not need to use
Events
andBehaviors
you can use\yii\base\Object
instead of\yii\base\Component
Just i think this code on config file can help you: