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

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

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

Сообщение Nex-Otaku »

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

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

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
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

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

Сообщение ElisDN »

А у вас точно Beta создаётся? Что echo get_class($this); в экшене выводит?
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

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

Сообщение Nex-Otaku »

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

Сейчас на чистых контроллерах в консоли проверил - всё правильно работает, Beta создаётся.
Видимо, грешит не фреймворк, а сторонний модуль, который как-то не так контроллеры создаёт. Буду разбираться.
Nex-Otaku
Сообщения: 831
Зарегистрирован: 2016.07.09, 21:07

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

Сообщение Nex-Otaku »

Разобрался.

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

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