2017-07-02 37 views
1

是否有可能定义Silex路线的路线定义去。举例来说,定义以下途径取决于以前的路线是什么:定义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 

这里路径应该是{id}当是listsuccess当是add或没事的时候4thhelp。但我不知道如何在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表示该操作可用。

这可能吗?怎么样?

回答

2

找到这个答案的解决方案:https://stackoverflow.com/a/15214674/49318

$app->get('/pdf/{template}/{args}', function ($template, $args) { 
    ... 
}) 
->assert('args', '.*') 
->convert('args', function ($args) { 
    return explode('/', $args); 
});