Страница 1 из 1

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

Добавлено: 2017.07.13, 09:29
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. Есть ли ещё какие-то подводные камни, связанные с наследованием контроллеров? Может, контроллеры вообще наследовать не рекомендуется?

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

Добавлено: 2017.07.13, 09:47
ElisDN
А у вас точно Beta создаётся? Что echo get_class($this); в экшене выводит?

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

Добавлено: 2017.07.13, 11:03
Nex-Otaku
В том-то и дело, что создаётся не Beta, а Alpha.

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

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

Добавлено: 2017.07.15, 12:15
Nex-Otaku
Разобрался.

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

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