Доброй поры суток. Разрабатываю прототип шестой версии нашей корпоративной смс
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"
)
);
Здесь понимаю конфликт между двумя правилами. И понимаю свою логическую ошибку. Какие предложите решение данной ситуации.