Files
yii2-usuario/docs/customizing/overriding-controllers.md

83 lines
3.2 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->session->setFlash('info', Yii::t('usuario', 'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.'));
\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-2019