В MVC это похоже на http://www.yourdomain.com/sampleController/sampleAction/
, и если вы вызываете только / sampleController /
, то / sampleController / indexAction /
и если вы просто вызываете /, то срабатывает / indexController / indexAction /
.
Конечно, есть исключения, но это более или менее условное обозначение.
У Zend есть что-то улыбающееся. Они называют это модулями.
По сути, это просто папки, каждая из которых содержит логику MVC. Итак, вы можете вызвать / Module1 / Controller / Action /
. Если вы просто вызовете / Module1 /
, то сработает / Module1 / indexController / indexAction /
. Это удобно, если у вас огромный проект, потому что вы можете структурировать еще больше, но это раздражает, если у вас есть только небольшой проект.
Мне очень нравится идея HMVC / PAC, и я хочу использовать ее в своей структуре.
Правильно ли я понял, что это в основном то же самое, что и Zend, но с неограниченным количеством вложенных модулей?
Так, например, у меня есть / sub-project / sub-sub-project / controller / action /
?
И каково соглашение, если я вызываю /A/B/C/D/.
Означает ли это действие D в контроллере C в модуле A / B? Или IndexAction в контроллере D в модуле A / B / C?
Давайте рассмотрим пример:
Content
ToplistController
AdministrateAction
IndexAction
ContentController
ToplistAction
Users
Chat
RoomController
IndexAction
Теперь я вызываю URL / content / toplist /
.
Для URL / users / chat / room /? Room = 1
пример делает это очевидным, потому что есть только одна возможность. Но правильный ли он? Существует ли соглашение об однозначной адресации правильного действия в правильном контроллере?
Моя первая идея заключалась в том, чтобы «угадать как можно меньше».
Итак, я сначала проверяю, совпадает ли URL-адрес напрямую с действием.
И если есть контроллер / модуль, названный так же с действием индекса, он просто не может сработать, если присутствует совпадение на «более высоком уровне».
Если это не так, я смотрю, есть ли URL непосредственно соответствует контроллеру и добавляет IndexAction.
Если это не тот случай, я ищу модуль и угадываю IndexController и IndexAction, а если это не так, я ищу модуль с именем index.
Но я бы хотел избежать этого, если / else доступ к файловой системе. Так что мне стало интересно, как проходит съезд Или есть хоть один? Я не смог найти никаких примеров!
Или что-то вроде вызова IndexAction, если ничего не указано, просто не выполняется, но каждый «короткий URL-адрес» должен быть указан в отдельной логике маршрутизации?
Или я полностью не понял концепцию HMVC / PAC?
К вашему сведению: я включил тег php, потому что я создаю свой фреймворк на php и хочу знать о соглашениях в php. Я часто видел различия в других языках программирования.