【问题标题】:Route parameter patterns on routes with similar parameters具有相似参数的路由上的路由参数模式
【发布时间】:2015-07-26 09:39:45
【问题描述】:

我有一些路由需要几个 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}$',
]);

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

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

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

【问题讨论】:

    标签: php laravel-4 routes


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。我真的希望有一个超级秘密的晦涩但优雅的函数专为此目的而构建,我只是找不到。
    猜你喜欢
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2016-03-22
    • 2019-10-26
    • 2018-01-07
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多