我正在尝试在我现有的CMS中实现尊重/休息。
问题:我想创建一个单一的魔术路线,工作方式如下:/admin/*/save,调用*控制器。。。
我想做这样的东西:
$r->any('/admin/*/save/*/', function($controller, $id = null) use ($r) {
return $r->dispatchClass($controller,array($id));
});
请注意,我不知道用户使用的是哪种HTTP方法。
事实上,我用这样的东西"解决"了这个问题
$r->any('/admin/*/save/*/', function($controller, $id = null) use ($tcn) {
$r = new Router;
$r->any('/admin/*/save/*/', $tcn($controller . '_save'), array($id));
return $r->run();
});
$tcn是一个命名函数,它返回控制器的完整名称空间。
我知道这不是一个好办法。
编辑:
这个项目想要成为开源,但它仍在创建中。我们正试图将一个基于功能范式的旧项目移植到OOP中。我们正在努力学习OOP,同时制作一个有用的项目。文件的实际状态可在以下位置找到:https://github.com/dindigital/skeleton
Alganet:管理路由的引导程序可以在以下位置找到:https://github.com/dindigital/skeleton/blob/master/admin_routes.php
一个简单的控制器示例:https://github.com/dindigital/skeleton/blob/master/src/app/admin/controllers/TagController.phphttps://github.com/dindigital/skeleton/blob/master/src/app/admin/controllers/TagSaveController.php
我喜欢Forwards和Factory方法。。。我还不能决定。
小问题!这在很大程度上取决于为什么要使这些路线动态化。你能给我们看一些控制器的样本结构吗?这样我就可以改进答案了?
同时,有两个本地功能可以提供帮助:
转发
您可以将该问题视为内部转发(不进行重定向)。通常重定向到其他静态路由,但也可以重定向到新路由:
$r->any(
'/admin/*/save/*/',
function ($controller, $id) use ($tcn, $r) {
return $r->any(
"/admin/$controller/save",
$tcn($controller . '_save'),
array($id)
);
}
);
工厂路线
此外,尊重''休息实施工厂路线。它是实验性的,但在测试中稳定:
$r->factoryRoute(
'ANY',
'/admin/*/save/*/',
'MyAbstractController',
function ($method, array $params) use ($tcn) {
return new $tcn($params[0] . '_save');
}
);