2017-07-02 55 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); 
});