【发布时间】:2019-11-03 21:43:19
【问题描述】:
我的项目是多语言的,所以在大多数路线中我添加了参数“locale”。但后者我不需要将“语言环境”参数传递给我的控制器。我尝试使用 forgetParameter() 方法删除此参数,但是当我使用此方法时,出现错误“Route not bound”。
所以我做错了什么。
如何从所有路由中删除“语言环境”?
Laravel 5.8
我的路线文件。
Route::group(['prefix' => '{locale}','where' => ['locale' => '[a-zA-Z]{2}']], function() {
Auth::routes([app()->getLocale()]);
Route::get('/', 'HomeController@index')->name('mainPage');
Route::get('/user/{id}','UserController@showUser')->name('getUserProfile')->forgetParameter('locale');
Route::get('/user/{id}/edit','UserController@editUser')->name('editUserProfile')
->middleware('can:editUser,App\User,id')->forgetParameter('locale');
Route::patch('/user/{id}/edit','UserController@updateUser')->name('updateUserProfile')
->middleware('can:updateUser,App\User,id')->forgetParameter('locale');
});
这个问题不重复 - Laravel 5.4: How to DO NOT use route parameter in controller
该问题的解决方案不适用于我的情况。我的问题是为什么“forgotParamter()”会抛出错误?
另一个问题是,为什么我不能在中间件中使用这种结构:
$request->route()->forgetParameter('locale')
我有以下错误:
在 null 上调用成员函数 is()
谢谢。
【问题讨论】:
-
我遇到了类似的问题。您是否有可能尝试使用全局中间件?据此,$request->route() is null in Middleware, how can I filter by route parameters? 路由无法在全局中访问,因此您需要将其注册为路由中间件。