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

I have a few routes that takes a couple of UUIDs as parameters:

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

I want to be able to verify that those parameters are the correct format before passing control off to the action:

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

This works fine. However, I really don't want to repeat that pattern so many times (in the real case I have it repeated 8 times for 8 different UUID route parameters).

I can't do this:

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

Because that produces an error:

Route pattern "/foo/{uuid}/{uuid}" cannot reference variable name "uuid" more than once.

I can lump them all into a single function call since I discovered 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}$',
]);

But that is still repetitious. Is there a way I can bind multiple pattern keys to a single regular expression?

Ideally I'd like to find a way that avoids something like this:

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

There's no built in way to handle this, and I actually think the solution you found is pretty nice. Maybe a bit more elegant would be this:

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