php - 具有相似参数的路由上的路由参数模式

标签 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 路由参数重复了 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}$',
]);

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

理想情况下,我想找到一种避免这种情况的方法:
$pattern = 'uuid regex';
Route::patterns([
    'uuid1' => $pattern,
    'uuid2' => $pattern,
]);

最佳答案

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

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

关于php - 具有相似参数的路由上的路由参数模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242976/

相关文章:

javascript - 在 Express 应用程序中制作多个应用程序

php - 如何在不使用提交的情况下发布?

php - Laravel 4 可以登录 MySQL 数据库吗?

javascript - 使用ajax jquery保存每个表行中的所有数据

php - 使用 "artisan migrate"时如何更改时间戳列名称?

php - 扩展蓝图类?

php - CodeIgniter 路由不起作用

ruby-on-rails - 如何为所有 Ember.js 路由指定 URL 'prefix'?

php - 哪种是使用依赖容器的正确方法?

php - 预订可用性