yii2tech/behavior-trait

This package is abandoned and no longer maintained. No replacement package was suggested.

Allows handling events via inline declared methods, which can be added by traits

Fund package maintenance!
klimov-paul
Patreon

Installs: 220 439

Dependents: 0

Suggesters: 0

Security: 0

Stars: 18

Watchers: 5

Forks: 1

Open Issues: 0

Type:yii2-extension

1.0.0 2015-12-26 11:11 UTC

This package is auto-updated.

Last update: 2022-01-10 10:38:46 UTC


README

12951949

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.