在具有类似参数的路由上路由参数模式

时间:2015-05-14 16:55:49

标签: php laravel-4 routes

我有一些路由需要几个UUID作为参数:

TSource

我希望能够在将控制权交给操作之前验证这些参数是否是正确的格式:

SELECT DISTINCT trans.[Transaction], 
STUFF(( SELECT ',' + str(trans1.ProductNo)  AS [text()] FROM Transactions trans1 
WHERE trans.[Transaction]=trans1.[Transaction] ORDER BY trans1.[Transaction] FOR     XML PATH('')), 1,1,'')[ProductNo] 
FROM Transactions trans

这很好用。但是,我真的不想重复那种模式(在实际情况下,我为8个不同的UUID路由参数重复了8次)。

我不能这样做:

Route::get('/foo/{uuid1}/{uuid2}', 'Controller@action');

因为这会产生错误:

  

路由模式“/ foo / {uuid} / {uuid}”不能多次引用变量名“uuid”。

我发现Route::pattern('uuid1', '^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$');

,我可以将它们全部归为一个函数调用
Route::get('/foo/{uuid}/{uuid}', 'Controller@action');

但这仍然是重复的。有没有办法可以将多个模式键绑定到单个正则表达式?

理想情况下,我想找到一种方法来避免这样的事情:

Route::patterns

1 个答案:

答案 0 :(得分:4)

没有内置的方法来处理这个问题,我认为你找到的解决方案非常好。也许这样会更优雅:

Route::patterns(array_fill_keys(['uuid1', 'uuid2'], '/uuid regex/'));