Наследование контроллера в Cake PHP? - PullRequest
3 голосов
/ 11 декабря 2008

Кто-нибудь пытался это сделать? Возможно ли, и если да, с какими проблемами я столкнусь, если попытаюсь это сделать?

Ответы [ 5 ]

4 голосов
/ 08 января 2009

Если вы хотите разделить логику между контроллерами:

  • добавьте логику в AppController, чтобы поделиться ею со всеми контроллерами в вашем приложении.

  • создайте компонент и добавьте его к $ this-> компонентов для контроллеров, которыми вы хотите поделиться.

Добавление дополнительного наследования между контроллерами следует рассматривать только в качестве крайней меры, так как вы должны уделять дополнительное внимание тому, как обрабатываются компоненты и помощники. Например. вы должны вручную объединить $ this-> components & $ this-> helpers с AppController и контроллером, от которого вы наследуете.

3 голосов
/ 17 декабря 2008

Я поместил дополнительный слой между AppController и некоторыми специальными контроллерами в приложении.

Единственная проблема, с которой вы столкнетесь, - это объединение атрибутов класса $ helpers и $ components. В CakePHP переопределение этих переменных в ваших контроллерах не перезапишет те, которые установлены AppController, но объединит их.

Это делается специальным методом с именем __mergeVars () в базовом классе Controller, и, к сожалению, он делает это только для структуры контроллера по умолчанию. Ваш дополнительный слой не будет корректно объединен, если вы хотите наследовать $ helpers и $ controllers от AppController до ваших контроллеров.

2 голосов
/ 10 сентября 2013

Вы столкнетесь с проблемой, если свойства $components и $helpers не будут объединены и заменены. Обязательно определите protected $_mergeParent = 'YourParentClass', чтобы сделать это правильно. Значение по умолчанию для этого 'AppController'.

Исходный код: http://api.cakephp.org/2.4/source-class-Controller.html#294-301

1 голос
/ 11 декабря 2008

Почему бы не попробовать? По крайней мере, это уже делается с помощью классов Controller -> AppController -> MyController.

0 голосов
/ 11 декабря 2008

Конечно, вы можете легко разделить контроллеры на подклассы в Cake ... и тогда вы, как правило, будете использовать их функции ловушек, такие как 'beforeFilter', 'afterFilter' и т. Д., Чтобы добавить логику времени выполнения в ваши контроллеры. Обычно я ставлю по крайней мере 1 абстрактный контроллер между контроллером тортов и конечным контроллером, который вы настраиваете в маршруте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...