Что такое соглашение о структуре URL в шаблоне MVC / HMVC / PAC?

В 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. Я часто видел различия в других языках программирования.

5
задан The Surrican 12 February 2011 в 12:04
поделиться