具有相似参数的路由上的路由参数模式
Route parameter patterns on routes with similar parameters
我有一些路由需要几个 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');
因为这会产生错误:
Route pattern "/foo/{uuid}/{uuid}" cannot reference variable name "uuid" more than once.
自从我发现 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/'));
我有一些路由需要几个 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');
因为这会产生错误:
Route pattern "/foo/{uuid}/{uuid}" cannot reference variable name "uuid" more than once.
自从我发现 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/'));