Laravel 如何防止参数被注入到控制器方法中
How to prevent a parameter from getting injected in controller methods in Laravel
我正在 Laravel 创建一个多语言网站。我需要这样的网址:
https://website.com/en/admin/user/1
https://website.com/ar/admin/user/1
所以我的路由文件看起来像这样:
Route::group(['prefix' => '{locale}'], function(){
Route::middleware("locale")->group(function () {
Route::group(['prefix' => 'admin', 'as' => "admin.", "namespace" => "Admin"],function(){
Route::get('login', 'LoginController@index')->name("signin")->middleware("Guest");
Route::post('login', 'LoginController@login')->name('login')->middleware("Guest");
Route::group(["middleware" => "Admin"], function (){
Route::get('/', ["as" => "dashboard", "uses" =>'DashboardController@index']);
Route::get('logout', 'LoginController@logout')->name('logout');
Route::resource('users', 'UsersController');
});
});
});
});
我的中间件"locale":
public function handle($request, Closure $next)
{
URL::defaults(['locale' => $request->segment(1)]);
if(in_array($request->segment(1), config('app.locales')))
{
app()->setLocale($request->segment(1));
}
return $next($request);
}
现在的问题是,当我尝试使用带有参数的路由调用时,我必须将语言环境添加为第一个参数。例如:
这是 UsersController 中的一个方法:
public function destroy($locale, $id)
{
//Any Code
}
我必须将 $locale 作为参数添加到方法中才能使用其他参数,否则 $id 将具有 $locale 的值,即 "en"、"ar"而不是用户 ID。那么有什么办法可以避免这种情况,所以我的方法将如下所示:
public function destroy($id)
{
//Any Code
}
您可以像这样构建您的路线:
Route::group(['prefix' => app()->getLocale()], function(){
所以你将摆脱语言环境路由参数。
我正在 Laravel 创建一个多语言网站。我需要这样的网址:
https://website.com/en/admin/user/1
https://website.com/ar/admin/user/1
所以我的路由文件看起来像这样:
Route::group(['prefix' => '{locale}'], function(){
Route::middleware("locale")->group(function () {
Route::group(['prefix' => 'admin', 'as' => "admin.", "namespace" => "Admin"],function(){
Route::get('login', 'LoginController@index')->name("signin")->middleware("Guest");
Route::post('login', 'LoginController@login')->name('login')->middleware("Guest");
Route::group(["middleware" => "Admin"], function (){
Route::get('/', ["as" => "dashboard", "uses" =>'DashboardController@index']);
Route::get('logout', 'LoginController@logout')->name('logout');
Route::resource('users', 'UsersController');
});
});
});
});
我的中间件"locale":
public function handle($request, Closure $next)
{
URL::defaults(['locale' => $request->segment(1)]);
if(in_array($request->segment(1), config('app.locales')))
{
app()->setLocale($request->segment(1));
}
return $next($request);
}
现在的问题是,当我尝试使用带有参数的路由调用时,我必须将语言环境添加为第一个参数。例如: 这是 UsersController 中的一个方法:
public function destroy($locale, $id)
{
//Any Code
}
我必须将 $locale 作为参数添加到方法中才能使用其他参数,否则 $id 将具有 $locale 的值,即 "en"、"ar"而不是用户 ID。那么有什么办法可以避免这种情况,所以我的方法将如下所示:
public function destroy($id)
{
//Any Code
}
您可以像这样构建您的路线:
Route::group(['prefix' => app()->getLocale()], function(){
所以你将摆脱语言环境路由参数。