Прикрепить обработчик события beforeaction к определенному действию

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Прикрепить обработчик события beforeaction к определенному действию

Сообщение long399 »

Здравствуйте. Есть консольный контроллер и к нему подключено поведение.

Контроллер:

Код: Выделить всё

<?php
namespace console\controllers;

class MyController extends \yii\console\Controller
{
    public function behaviors()
    {
        return [
            \console\behaviors\MyBehavior::class,
        ];
    }

    public function actionTest1(string $s)
    {
        //
    }

    public function actionTest2(string $s)
    {
        //
    }
}
Поведение:

Код: Выделить всё

<?php
namespace console\behaviors;

class MyBehavior extends \yii\base\Behavior
{
    public function events()
    {
        return [
            \yii\console\Controller::EVENT_BEFORE_ACTION => 'startLog',
            \yii\console\Controller::EVENT_AFTER_ACTION => 'finishLog',
        ];
    }

    public function startLog()
    {
        //
    }

    public function finishLog()
    {
        //
    }
}
Это поведение будет срабатывать для обоих действий контроллера, но мне хотелось бы, чтобы оно работало, например, только для actionTest1(). Возможно такое сделать? Если да - подскажите, пожалуйста, как.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Прикрепить обработчик события beforeaction к определенному действию

Сообщение unknownby »

long399 писал(а): 2021.06.29, 06:27 Это поведение будет срабатывать для обоих действий контроллера, но мне хотелось бы, чтобы оно работало, например, только для actionTest1(). Возможно такое сделать? Если да - подскажите, пожалуйста, как.
Возможно. Вызывайте необходимое внутри actionTest1()
Зачем делать что-то общее, а потом спрашивать как это сделать для чего-то отдельного?

Ещё можно так прописать внутри контроллера и проверять что находится в $action, если test1, то выполнить присоединение behaviors

Код: Выделить всё

public function beforeAction($action)
    {
        //магия
    }
Ответить