如何防止参数在Laravel中的控制器方法中注入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何防止参数在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(){

所以你将摆脱locale route参数。

以上是关于如何防止参数在Laravel中的控制器方法中注入的主要内容,如果未能解决你的问题,请参考以下文章

IOC 控制反转Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取 Activity 中的所有方法 | 获取方法上的注解 | 获取注解上的注解 | 通过注解属性获取事件信息 )(代

参数化查询如何帮助防止 SQL 注入?

参数化查询如何帮助防止 SQL 注入?

如何验证 REST Lumen/Laravel 请求中的参数?

为什么参数化查询可以防止SQL注入?(转)

ASP.NET如何防止SQL注入