是否可以在路由定义的基础上定义Silex路由。例如,根据以前的路由定义以下路由:
/a/{user}/{app_name}/list/ -> /a/{user}/{app_name}/list/{id}/
/a/{user}/{app_name}/add/ -> /a/{user}/{app_name}/add/success/
/a/{user}/{app_name}/help/ -> no sub route
第4次路线应为{id}
当第4次为list
或success
时第4次< / strong> add
或第4次为help
时没有。但是,我不知道如何在Silex中做到这一点:
$app -> get('/a/{user}/{app_name}/{action}/{sub}/', function (Silex\Application $app, $user, $app_name, $action, $sub) {
...
});
这对所有人来说显然不起作用。
有没有办法做这样的事情:
$app -> get('/a/{user}/{app_name}/{action}/', function (Silex\Application $app, $user, $app_name, $action) {
if ($action == 'list') {
$app -> get('/a/{user}/{app_name}/{action}/{id}', function (Silex\Application $app, $user, $app_name, $action, $id) {
...
});
} elseif ($action == 'add') {
$app -> get('/a/{user}/{app_name}/{action}/success', function (Silex\Application $app, $user, $app_name, $action) {
...
});
}
});
列表,添加,帮助等操作无限期,因为我们的用户在我们的系统中创建了简单的应用。所以我无法直接在我的代码中对它们进行硬编码。只有在路由转到特定用户应用程序之后,例如/a/jim/cook
行动可用。
这可能吗?怎么样?
答案 0 :(得分:2)
在这个答案找到解决方案:https://stackoverflow.com/a/15214674/49318
$app->get('/pdf/{template}/{args}', function ($template, $args) {
...
})
->assert('args', '.*')
->convert('args', function ($args) {
return explode('/', $args);
});