Skip to content
This repository has been archived by the owner on Jan 10, 2022. It is now read-only.

Latest commit

 

History

History
79 lines (58 loc) · 2.71 KB

README.md

File metadata and controls

79 lines (58 loc) · 2.71 KB

Behavior Trait Extension for Yii 2


This extension provides the ability of handling events via inline declared methods, which can be added via traits.

For license information check the LICENSE-file.

Latest Stable Version Total Downloads Build Status

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist yii2tech/behavior-trait

or add

"yii2tech/behavior-trait": "*"

to the require section of your composer.json.

Usage

This extension introduces special trait [[\yii2tech\behaviortrait\BehaviorTrait]], which if used provides the ability of handling events via inline declared methods, which can be added via other traits. This trait can be added to any descendant of [[\yii\base\Component]].

Each event handler method should be named by pattern: '{eventName}Handler{UniqueSuffix}', where 'eventName' is a name of the event the method should handle, 'UniqueSuffix' any suffix, which separate particular event handler method from the others. For example: if the class has an event 'beforeInsert' it can introduce method named beforeInsertHandlerEncryptPassword, which will be automatically triggered when event 'beforeInsert' is triggered:

use yii\db\ActiveRecord;
use yii2tech\behaviortrait\BehaviorTrait;

class User extends ActiveRecord
{
    use BehaviorTrait; // add `BehaviorTrait` allowing to use inline event handlers
    use EncryptPasswordTrait; // add trait, which introduce inline event handler

    // ...
}

trait EncryptPasswordTrait
{
    public function beforeInsertHandlerEncryptPassword(Event $event)
    {
        if (!empty($this->newPassword)) {
            $this->password = sha1($this->newPassword);
        }
    }
}

Attention: watch for the naming collisions, ensure any inline handler declared either in class or via trait has a unique name (with unique suffix)!

Note: using traits instead behaviors improves performance but is less flexible. Keep in mind that such approach has been rejected at Yii2 core at yiisoft/yii2#1041.