Некорректно работает роутинг в MVC проекте. Как исправить логическую ошибку?

Доброй поры суток. Разрабатываю прототип шестой версии нашей корпоративной смс OYi. Engine. На вооружении php 5.3 vs namespaces. Фреймворк собственный. Структура классов по правилам PSR.
Каждый из компонентов системы имеет базовые экшены index | create | edit | delete. По умолчанию грузится index.
Примеры формирования url:
mysite.ua/engine/structure --> app\controllers\engine\Structure::index()
mysite.ua/engine/structure/create --> app\controllers\engine\Structure::create()
mysite.ua/engine/structure/edit/1 --> app\controllers\engine\Structure::edit(1)
...
mysite.ua/engine/users --> app\controllers\engine\Users::index()

все было ок, но когда я начал писать группы пользователей (app\controllers\engine\users\Group) стал на грабли:
mysite.ua/engine/users/group/create --> app\controllers\engine\users\Group::create() // -- все ок
mysite.ua/engine/users/group --> app\controllers\engine\Users::group(); // FAIL

По идее, должен запуститься app\controllers\engine\users\Group::index(), но запускается
app\controllers\engine\Users::group().

Правила роутингу добавляются по приоритету. Срабатывает первое совпадение.
$router->add(
"/engine/users/:controller(/:action(/))",
array(
'namespace'=>'app\controllers\engine\users\\',
"controller" => 1,
"action" => 2
)
);

$router->add(
"/engine/:controller/:action(/):params",
array(
'namespace'=>'app\controllers\engine\\',
"controller" => 1,
"action" => 2,
"params" => 3
)
);

$router->add(
"/engine/:controller/:action(/)",
array(
'namespace'=>'app\controllers\engine\\',
'controller' => 1,
"action" => 2
)
);

$router->add(
"/engine/:controller(/)",
array(
'namespace'=>'app\controllers\engine\\',
"controller" => 1,
)
);

$router->add(
"/engine(/)",
array(
'namespace'=>'app\controllers\engine\\',
"controller" => "dashboard"
)
);

Здесь понимаю конфликт между двумя правилами. И понимаю свою логическую ошибку. Какие предложите решение данной ситуации.
  • Вопрос задан
  • 2663 просмотра
Решения вопроса 1
0neS
@0neS
Что вы от нас то хотите? Вы же не на оперсорсном фреймворке пишете, откуда мы знаем, что и как у вас там работает.
Попробуйте прописать в самом начале правил роутинга добавить правило роутинга для экшена index нужного контроллера, либо переписывайте код роутера так, чтобы по-умолчанию сначала срабатывал дефолтный экшен контроллера, если он не задан.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы