2015-02-18 4 views
0

Вот мой метод поведения events(). Когда я запускаю второй обработчик события, то есть sendMailHanlder вызывается, и он игнорирует anotherOne. Я верю, второй перезаписывает первый. Как решить эту проблему, чтобы обработать оба обработчика событий?Yii2 События: Как добавить несколько обработчиков событий, используя метод событий поведения?

// UserBehavior.php 
    public function events() 
    { 
     return [ 
      Users::EVENT_NEW_USER => [$this, 'anotherOne'], 
      Users::EVENT_NEW_USER => [$this, 'sendMailHanlder'], 
     ]; 
    } 
    // here are two handlers 
    public function sendMailHanlder($e) 
    { 
     echo "; 
    } 
    public function anotherOne($e) 
    { 
     echo 'another one'; 
    } 

Одна вещь, чтобы заметить, что я прикрепление это поведение моей Users.php модели. Я попытался добавить оба обработчика с использованием метода модели init(). Таким образом, вызвали обоих обработчиков. Вот мой код инициализации.

public function init() 
{ 
    $this->on(self::EVENT_NEW_USER, [$this, 'anotherOne']); 
    $this->on(self::EVENT_NEW_USER, [$this, 'sendMailHanlder']); 
} 

ответ

3

Вы можете переопределить поведение :: присоединять(), так что вы можете иметь что-то подобное в вашем UserBehavior и нет необходимости ваших событий()

// UserBehavior.php 
    public function attach($owner) 
    { 
     parent::attach($owner); 
     $owner->on(self::EVENT_NEW_USER, [$this, 'anotherOne']); 
     $owner->on(self::EVENT_NEW_USER, [$this, 'sendMailHanlder']); 
    } 
0

Нельзя использовать одинаковые имена событий. Используйте вместо этого:

public function events() 
{ 
    return [ 
     Users::EVENT_NEW_USER => [$this, 'sendMailHanlder'], 
    ]; 
} 

// Here are two handlers 
public function sendMailHanlder($e) 
{ 
    echo ''; 
    $this->anotherOne($e); 
} 

public function anotherOne($e) 
{ 
    echo 'another one'; 
}