Наследование контроллера в Cake PHP?

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

11.12.2008 18:00:55
Пожалуйста, будьте более конкретны со своим вопросом и объясните проблему, которую вы пытаетесь решить.
Eran Galperin 11.12.2008 18:12:48
5 ОТВЕТОВ
РЕШЕНИЕ

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

0
11.12.2008 20:23:07

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

1
11.12.2008 19:01:34

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

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

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

3
17.12.2008 09:55:30

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

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

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

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

4
8.01.2009 13:55:11

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

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

2
10.09.2013 12:31:59
где я должен добавить этот защищенный $ _mergeParent = 'YourParentClass'?
Bangalore 3.06.2014 06:01:25