82 lines
3.0 KiB
Markdown
82 lines
3.0 KiB
Markdown
Overriding Controllers
|
|
======================
|
|
|
|
Maybe you need to override the default's functionality of the module's controllers. For that, as you probably know,
|
|
Yii2 Modules have an attribute named `controllerMap` that you can configure with your very own controllers.
|
|
|
|
Please, before you override a controller's action, make sure that it won't be enough with using the
|
|
[events](../events). For example you can use event for redirect after finish confirmation or recovery:
|
|
|
|
```php
|
|
'modules' => [
|
|
'user' => [
|
|
'controllerMap' => [
|
|
'recovery' => [
|
|
'class' => \Da\User\Controller\RecoveryController::class,
|
|
'on ' . \Da\User\Event\FormEvent::EVENT_AFTER_REQUEST => function (\Da\User\Event\FormEvent $event) {
|
|
\Yii::$app->controller->redirect(['/user/security/login']);
|
|
\Yii::$app->end();
|
|
},
|
|
'on ' . \Da\User\Event\ResetPasswordEvent::EVENT_AFTER_RESET => function (\Da\User\Event\ResetPasswordEvent $event) {
|
|
if ($event->token->user ?? false) {
|
|
\Yii::$app->user->login($event->token->user);
|
|
\Yii::$app->session->setFlash('success', Yii::t('usuario', 'Password has been changed'));
|
|
}
|
|
\Yii::$app->controller->redirect(\Yii::$app->getUser()->getReturnUrl());
|
|
\Yii::$app->end();
|
|
},
|
|
],
|
|
'registration' => [
|
|
'class' => \Da\User\Controller\RegistrationController::class,
|
|
'on ' . \Da\User\Event\FormEvent::EVENT_AFTER_REGISTER => function (\Da\User\Event\FormEvent $event) {
|
|
\Yii::$app->controller->redirect(['/user/security/login']);
|
|
\Yii::$app->end();
|
|
},
|
|
'on ' . \Da\User\Event\FormEvent::EVENT_AFTER_RESEND => function (\Da\User\Event\FormEvent $event) {
|
|
\Yii::$app->controller->redirect(['/user/security/login']);
|
|
\Yii::$app->end();
|
|
},
|
|
],
|
|
...
|
|
```
|
|
|
|
> See more about this attribute on
|
|
> [ The Definitive Guide to Yii 2.0](http://www.yiiframework.com/doc-2.0/guide-structure-controllers.html#controller-map)
|
|
|
|
How to Override
|
|
---------------
|
|
|
|
First, create your new controller:
|
|
|
|
```php
|
|
namespace app\controllers;
|
|
|
|
use Da\User\Controller\RegistrationController as BaseController;
|
|
|
|
class ProfileController extends BaseController {
|
|
|
|
public function actionConfirm($id, $code) {
|
|
// ... your code here
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
Now, the only thing that is missing is to add your brand new controller to the module's controller's map:
|
|
|
|
```php
|
|
'modules' => [
|
|
// ...
|
|
'user' => [
|
|
'class' => 'Da\User\Module',
|
|
'controllerMap' => [
|
|
'profile' => 'app\controllers\ProfileController'
|
|
]
|
|
]
|
|
]
|
|
```
|
|
|
|
© [2amigos](http://www.2amigos.us/) 2013-2017
|
|
|
|
|