Zend: ACL и Auth через наследование, а не композицию

Я прочитал несколько разных книг по Zend, где ACL и Auth реализованы с использованием композиции. Обычно они включают помощников действий с методами preDispatch, зарегистрированными в начальной загрузке.

Теперь, во всем кодировании до сих пор одни и те же методы ACL и Auth выполняются для каждого из моих контроллеров. Поэтому я думаю, что с таким же успехом могу использовать наследование для достижения этой цели. Я что-то упускаю? Наследование кажется более простым.

Раньше я использовал помощников действий, чтобы не загружать все правила в объект ACL. (Я просто регистрировал текущий контроллер как ресурс ACL и добавлял для этого правила).

Однако, когда я пришел к интеграции Zend Navigation, я обнаружил, что мне нужны все правила ACL (независимо от контроллера), чтобы решить, какие пункты меню представить пользователю.

Я предполагаю, что с композицией мои помощники ACL и Auth легче использовать в других проектах, но в моем случае это лишь небольшое преимущество.

Спасибо!


person DatsunBing    schedule 20.09.2011    source источник
comment
Вы также можете использовать плагины контроллеров, см. stackoverflow.com/questions/4943940/ кажется композицией, но очень близок к наследованию контроллеров. И это не мешает вам иметь объект Zend_Acl, доступный для меню.   -  person regilero    schedule 20.09.2011
comment
Хороший регилеро. Вы хотите вырезать / вставить это в ответ? Пока это мой любимый.   -  person DatsunBing    schedule 20.09.2011


Ответы (2)


Вы также можете использовать плагины контроллеров, см. предыдущий ответ, похоже на композицию, но очень близко к наследованию контроллеров. И это не мешает вам иметь объект Zend_Acl, доступный для меню.

person regilero    schedule 20.09.2011
comment
Спасибо, regilero. Я упустил из виду плагины фронтального контроллера. - person DatsunBing; 21.09.2011

В целом есть много веских причин предпочесть композицию наследованию. Здесь можно увидеть множество мнений: Предпочитать композицию наследованию?

Тем не менее, вам решать, есть ли у вас более веские причины использовать наследование вместо композиции. Вы можете интегрировать свой ACL в базовый класс контроллера и сделать все ваши контроллеры унаследованными от него. У вас есть еще один вопрос SO здесь: Базовый контроллер для всех контроллеров в zend рамки

Надеюсь, это поможет,

person dinopmi    schedule 20.09.2011