我正在开发一个多语言应用程序并尝试制作一个中间件来将路由 {locale} 前缀传递给 URL。但是现在我不需要在 Controller 中使用这个 {locale} 参数,例如:
public function getPost(App\Post $post)
{
return view('welcome')->withPost($post);
}
但上面的代码不起作用,除非我将 App\Post $post
更改为 $locale, App\Post $post
。
问题是因为每当我创建一个新的 Controller 时我都需要传递 $locale 参数。那可不酷。
如何避免将 $locale
参数传递给所有 Controller ?我不需要它,因为我已经在我的中间件上使用了它。
更新:
路由\web.php
Route::prefix('{locale}')->middleware('locale')->group(function () {
Route::get('/', 'PageController@getHome')->name('welcome');
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
...
// This route must be the last!
Route::get('/{post}', 'PageController@getPost')->name('post');
});
最佳答案
在 Laravel 的路由类中有一个 forgetParameter() 方法,它可以从解析到 Controller 方法中移除一个参数。
它可以用于例如在中间件中,通过这样调用它:
$request->route()->forgetParameter('locale');
然后该参数将从 Controller 调度程序的参数属性中删除,因此不会作为参数解析到 Controller 方法中。
关于拉维尔 5.4 : How to DO NOT use route parameter in controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44619512/