User Events

The following is the list of the user events and where they happen:

On Controllers

  • AdminController

    • UserEvent::EVENT_BEFORE_CREATE: Occurs before a user has been created
    • UserEvent::EVENT_AFTER_CREATE: Occurs after a user has been created
    • UserEvent::EVENT_BEFORE_PROFILE_UPDATE: Occurs before a user's profile has been updated
    • UserEvent::EVENT_AFTER_PROFILE_UPDATE: Occurs after a user's profile has been updated
    • UserEvent::EVENT_BEFORE_CONFIRMATION: Occurs before a user's email has been confirmed
    • UserEvent::EVENT_AFTER_CONFIRMATION: Occurs after a user's email has been confirmed
    • UserEvent::EVENT_BEFORE_BLOCK: Occurs before a user is being blocked (forbid access to app)
    • UserEvent::EVENT_AFTER_BLOCK: Occurs after a user is being blocked (forbid access to app)
    • UserEvent::EVENT_BEFORE_UNBLOCK: Occurs before a user is being un-blocked
    • UserEvent::EVENT_AFTER_UNBLOCK: Occurs after a user is being un-blocked
  • RegistrationController

    • UserEvent::EVENT_BEFORE_REGISTER: Occurs before user registration
    • UserEvent::EVENT_AFTER_REGISTER: Occurs after user registration
    • UserEvent::EVENT_BEFORE_CONFIRMATION
    • UserEvent::EVENT_AFTER_CONFIRMATION
  • SecurityController

    • UserEvent::EVENT_BEFORE_LOGOUT: Occurs before user logs out of the app
    • UserEvent::EVENT_AFTER_LOGOUT: Occurs after user logs out of the app
  • SettingsController

    • UserEvent::EVENT_BEFORE_PROFILE_UPDATE
    • UserEvent::EVENT_AFTER_PROFILE_UPDATE
    • UserEvent::EVENT_BEFORE_ACCOUNT_UPDATE: Occurs before the user account is updated
    • UserEvent::EVENT_AFTER_ACCOUNT_UPDATE: Occurs after the user account is updated
    • UserEvent::EVENT_BEFORE_DELETE: Occurs before the user account is deleted
    • UserEvent::EVENT_AFTER_DELETE: Occurs after the user account is deleted

On Models

  • User
    • UserEvent::EVENT_BEFORE_REGISTER
    • UserEvent::EVENT_AFTER_REGISTER
    • UserEvent::EVENT_BEFORE_CONFIRMATION
    • UserEvent::EVENT_AFTER_CONFIRMATION
    • UserEvent::EVENT_BEFORE_BLOCK
    • UserEvent::EVENT_AFTER_BLOCK
    • UserEvent::EVENT_BEFORE_UNBLOCK
    • UserEvent::EVENT_AFTER_UNBLOCK

How to Work With User Events

All these events receive an instance of Da\User\Event\UserEvent. The Event receives an instance of a Da\Model\User class that you could use for whatever logic you wish to implement.

The recommended way to make use of events is by creating a new file in your config folder (i.e. events.php), configure there all your events and then include that file on your entry script.

Here is an example of setting an event for the AdminController and the User model:

<?php 
// events.php file

use Da\User\Controller\AdminController;
use Da\User\Event\UserEvent;
use Da\User\Model\User;
use yii\base\Event;

// This will happen at the controller's level
Event::on(AdminController::class, UserEvent::EVENT_BEFORE_CREATE, function (UserEvent $event) {
    $user = $event->getUser();

    // ... your logic here
}

// This will happen at the model's level
Event::on(User::class, UserEvent::EVENT_BEFORE_CREATE, function (UserEvent $event) {

    $user = $event->getUser();

    // ... your logic here
}

Now, the only thing I need to do is adding the events.php file to your entry script (i.e. index.php). The following is taken from the Yii 2 Advanced Application Template:

<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../../vendor/autoload.php');
require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require(__DIR__ . '/../../common/config/bootstrap.php');
require(__DIR__ . '/../config/bootstrap.php');

require(__DIR__ . '/../config/events.php'); // <--- adding events here! :)

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../../common/config/main.php'),
    require(__DIR__ . '/../../common/config/main-local.php'),
    require(__DIR__ . '/../config/main.php'),
    require(__DIR__ . '/../config/main-local.php')
);

$application = new yii\web\Application($config);
$application->run();

© 2amigos 2013-2017