Silex路由互换参数

Silex route interchangeable parameters

考虑到我有一条路线必须接受对象的代码或 ID,在 silex 中有没有什么方法可以检测到传递给路线的(数字或非数字)然后发送一个变量还是另一个?

例如。 /route/1 -> 数据库中美国的 ID

我向控制器发送 $id = 1 和 $code = null

/route/US -> 数据库中美国的代码

我向控制器发送 $id = null 和 $code = 'US'

我试过类似的方法,但行不通

$apiRoutesV2
    ->get('/route/{code}{id}', 'controllers.myController:getIndex')
    ->value('id', null)
    ->assert('id', '[0-9]+')
    ->value('code', null)
    ->assert('code', '[a-zA-Z]+');

如果id和code都可以为空,可以做一个默认值的路由:

$app
    ->get('/route/{code}{id}', 'controllers.myController:getIndex')
    ->value('id', '')
    ->assert('id', '[0-9]*')
    ->value('code', '')
    ->assert('code', '[a-zA-Z]*');

如果需要填写其中一个参数,请添加 2 条路线:

$app
    ->get('/route/{id}', 'controllers.myController:getIndex')
    ->assert('id', '[0-9]+');

$app
    ->get('/route/{code}', 'controllers.myController:getIndex')
    ->assert('code', '[a-zA-Z]+');