Почему контроллеры действий Zend Framework имеют суффикс?

Я довольно новый пользователь Zend Framework, но я не новичок в PHP или программировании. Я просматривал код, чтобы попытаться понять, как все сочетается. Одна из частей, на которую я смотрел, - это то, как классы автоматически загружаются в систему. Я вижу:

  • Zend_Application_Bootstrap ссылается на Zend/Application/Bootstrap.php
  • Zend_Controller_Action ссылается на Zend/Controller/Action.php
  • ... и т.д.

По сути, _ преобразуется в разделитель каталогов и загружается автоматически.

Чего я не понимаю (хотя я уверен, что есть веская причина), так это почему это соглашение не соблюдается для контроллеров действий?

  • IndexController ссылается на Application/controllers/IndexController.php

Почему нет:

  • Application_Controllers_Index -> /Application/Controllers/Index.php
  • or
  • Controllers_Index -> /Application/Controllers/Index.php

?

Я предполагаю, что добавление к классу суффикса где-то снижает некоторую сложность системы, с первого взгляда на структуру Zend все очень хорошо продумано - я не могу представить, что соглашения вводятся без веской причины.

Может ли кто-нибудь объяснить, почему контроллеры имеют префикс, или, что еще лучше, указать мне на некоторый код в ядре, показывающий, почему они должны иметь префикс?

Спасибо :)


person mike    schedule 14.08.2010    source источник


Ответы (3)


Честно говоря, я не совсем уверен в том, почему изначально были разработаны соглашения. Я подозреваю, что они были связаны с тем, как в то время развивались другие фреймворки — в частности, популярность RoR резко возросла, и именно так они определяли ресурсы приложений. (Во время первоначальной итерации MVC я только начинал работать с Zend; осенью 2006 года я переписал его, но целью этого было сохранить его соответствие тому, что было разработано ранее, и в то же время предложить лучшее и больше. гибкость.)

Мы продолжили эту парагигму, поскольку она подтверждает идею о том, что все элементы в иерархии приложений/приложений являются ресурсами, а не кодом вашей библиотеки. Это особенно важно в связи с тем, что в этом дереве может быть код, не относящийся к классу (скрипты просмотра, макеты и т. д.).

Тем не менее, это, безусловно, создало несколько головных болей — введение загрузчика ресурсов показывает, что у нас была проблема, которую нам нужно было решить. Загрузчик ресурсов в основном устраняет симптомы, но не обязательно основную причину (плохие соглашения). Пока мы работаем над ZF2, мы будем возвращаться к этому. Если вы хотите опубликовать свои мысли, я приглашаю вас сделать это в список рассылки zf-contributors.

person weierophinney    schedule 14.08.2010
comment
Привет, Мэтью, большое спасибо за этот ответ - мне не терпелось найти техническую причину для соглашения. Рад, что вы изучаете ZF2, и я обязательно опубликую некоторые мысли в списке рассылки. - person mike; 14.08.2010

Имена файлов и имена классов контроллеров должны иметь постфикс Controller. Зенд видит постфикс в имени класса и понимает, что это контроллер. Он находит этот класс в папке контроллеров.

person Alex Pliutau    schedule 14.08.2010
comment
Конечно, можно сказать, является ли контроллер контроллером, потому что он находится в каталоге контроллеров? - person mike; 14.08.2010

Я сам новичок в Zend Framework, но из того, что я могу сказать, учитывая то, как сейчас стоит Zend Framework, для этого нет веских причин. Я не уверен, является ли это пережитком того, как все началось, или просто предпочтениями вовлеченных людей, но я слышал, что это будет изменено для ZF 2.0.

person Peter O'Callaghan    schedule 14.08.2010