Обработка действий в контроллере с наследованием

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Закрыто
Nex-Otaku
Сообщения: 358
Зарегистрирован: 2016.07.09, 21:07

Обработка действий в контроллере с наследованием

Сообщение Nex-Otaku » 2017.07.13, 09:29

Есть два класса контроллера. Один унаследован от другого, чтобы расширить список доступных действий.

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

class Alpha extends Controller
{
    public function actionOne()
    {
        ...
    }

    public function actionTwo()
    {
        ...
    }
}

class Beta extends Alpha
{
    public function actionThree()
    {
        ...
    }
}
Проект везде ссылается только на контроллер Beta.
Если открыть страницу "/beta/one", то выполнится действие "actionOne".

Но есть нюанс. Для обработки действия будет создан объект контроллера класса Alpha, а не класса Beta. То есть, если у Beta, например, есть конструктор, он даже не будет вызван. Пути к вьюшкам тоже будут отсчитываться от Alpha.

Вопросы:

1. Так задумано, или это косяк фреймворка?

2. Не лучше ли создавать объект класса Beta? Ведь экшен в любом случае отработает.

3. Есть ли ещё какие-то подводные камни, связанные с наследованием контроллеров? Может, контроллеры вообще наследовать не рекомендуется?

Аватара пользователя
ElisDN
Сообщения: 4594
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Обработка действий в контроллере с наследованием

Сообщение ElisDN » 2017.07.13, 09:47

А у вас точно Beta создаётся? Что echo get_class($this); в экшене выводит?
Не забудьте пройти мастер-класс по Yii2.

Nex-Otaku
Сообщения: 358
Зарегистрирован: 2016.07.09, 21:07

Re: Обработка действий в контроллере с наследованием

Сообщение Nex-Otaku » 2017.07.13, 11:03

В том-то и дело, что создаётся не Beta, а Alpha.

Сейчас на чистых контроллерах в консоли проверил - всё правильно работает, Beta создаётся.
Видимо, грешит не фреймворк, а сторонний модуль, который как-то не так контроллеры создаёт. Буду разбираться.

Nex-Otaku
Сообщения: 358
Зарегистрирован: 2016.07.09, 21:07

Re: Обработка действий в контроллере с наследованием

Сообщение Nex-Otaku » 2017.07.15, 12:15

Разобрался.

Косяк был мой, вынес расширение для доработки в отдельную папку, алиас прописал, а старое из композера удалить забыл. В итоге оно грузило половину кода из одного места, половину из другого.

Удалил старое и всё заработало. Фреймворк ни при чём ) Тему закрываю.

Закрыто