Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 具有相似参数的管线上的管线参数模式_Php_Laravel 4_Routes - Fatal编程技术网

Php 具有相似参数的管线上的管线参数模式

Php 具有相似参数的管线上的管线参数模式,php,laravel-4,routes,Php,Laravel 4,Routes,我有几个路由以几个UUID作为参数: Route::get('/foo/{uuid1}/{uuid2}', 'Controller@action'); 在将控制权传递给操作之前,我希望能够验证这些参数的格式是否正确: Route::pattern('uuid1', '^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$'); 这个很好用。但是,我真的不想重复这种模式太多次(在实际情况中,我为8个不同的UUID路由参数重复

我有几个路由以几个UUID作为参数:

Route::get('/foo/{uuid1}/{uuid2}', 'Controller@action');
在将控制权传递给操作之前,我希望能够验证这些参数的格式是否正确:

Route::pattern('uuid1', '^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$');
这个很好用。但是,我真的不想重复这种模式太多次(在实际情况中,我为8个不同的UUID路由参数重复了8次)

我不能这样做:

Route::get('/foo/{uuid}/{uuid}', 'Controller@action');
因为这会产生一个错误:

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

因为我发现了
Route::patterns
,所以我可以将它们全部合并到一个函数调用中:

Route::patterns([
    'uuid1' => '^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$',
    'uuid2' => '^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$',
]);
但这仍然是重复的。有没有一种方法可以将多个模式键绑定到一个正则表达式

理想情况下,我希望找到一种避免类似情况的方法:

$pattern = 'uuid regex';
Route::patterns([
    'uuid1' => $pattern,
    'uuid2' => $pattern,
]);

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

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

谢谢你的回复。我真的希望有一个超级秘密的模糊但优雅的功能,只是为了这个目的,我只是找不到。