首页 > 解决方案 > Laravel 路由组前缀 - 变量不起作用

问题描述

在 web.php 中:

Route::group(['middleware'=>['checklang','checkmoney']],function(){
    Route::get('/', function () {
    return redirect('/'.session()->get('lang'));
    });
    
    Route::group([
    'prefix' => '{locale}',
    'where'=>['locale'=>'[a-zA-Z]{2}']],
 function() {

    Route::get('/tour/{id}','HomeController@getTours');
});
});

在 HomeContoller 中:

   public function getTours($id){
 
    dd($id);
}

尝试访问 url 时:example.com/en/tour/5 得到结果 en,但应该是5

问题出在哪里以及如何解决?

标签: laravelvariablesroutesprefix

解决方案


您的路线有 2 个变量,{locale}并且{id},但您的 Controller 方法仅引用其中一个。您需要同时使用两者:

web.php

Route::group(['prefix' => '{locale}'], function () {
  ...
  Route::get('/tour/{id}', 'HomeController@getTours');
});

HomeController.php

public function getTours($locale, $id) {
   dd($locale, $id); // 'en', 5
}

注意:定义的顺序很重要;{locale}(en){id}位于 5 之前,因此请确保以正确的顺序定义它们。


推荐阅读