【问题标题】:Possible to Or Laravel Routes?可能还是 Laravel 路线?
【发布时间】:2014-11-18 23:51:33
【问题描述】:

我正在用 Laravel 4 构建一个双语网站,我的 URL 包含一个语言环境标识符。除此之外,用正确的语言拥有漂亮的蛞蝓很重要。所以,假设我有一条路线可以让你找到mugs。法语中的等价物是 tasses

目前我正在做的是

Route::get('{locale}/mugs', ['uses' => 'MugsController@index']);
Route::get('{locale}/mugs/{id}', ['uses' => 'MugsController@show']);

Route::get('{locale}/tasses', ['uses' => 'MugsController@index']);
Route::get('{locale}/tasses/{id}', ['uses' => 'MugsController@show']);

并且在控制器方法中进行简短的 URL/区域设置检查和重定向,以确保 slug 使用正确的语言,例如,您不会以 /fr/mugs 结束。

这行得通,但可能会变得笨拙,因为如果我再做更多路线,我每个人都会有两条。例如,我必须同时拥有{locale}/mugs/ceramic/{id}{locale}/tasses/ceramique/{id},等等。

有没有办法在 Laravel 中做类似{locale}/mugs|tasses/{id} 的事情?或者甚至检查正则表达式?

我知道你可以用正则表达式检查路由参数,但是你能检查实际的路径组件吗?

【问题讨论】:

    标签: php laravel laravel-4 localization laravel-routing


    【解决方案1】:

    你可以这样做:

    Route::get('{locale}/{special}', ['uses' => 'MugsController@show'])->where('special','^(mugs|tasses)$');
    

    special 在这种情况下必须是 mugstasses

    【讨论】:

    • 但是现在他所有的路由都会指向MugsController@show,他的代码也指向MugsController@index
    • @hebron 我没注意到。我刚刚修改了这个 id 部分
    【解决方案2】:

    您可以创建正则表达式模式,并执行以下操作:

    Route::pattern('mugs', 'mugs|tasses');
    
    Route::get('{locale}/{mugs}', ['uses' => 'MugsController@index']);
    Route::get('{locale}/{mugs}/{id}', ['uses' => 'MugsController@show']);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 2019-02-13
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 2019-12-06
      相关资源
      最近更新 更多