Laravel方法获取输入参数而不需要修剪任何值

2cmtqfgy  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(110)

对于Laravel发布请求的参数,使用$request->all();获取
如果前面有空格,这个函数会自动调整request参数,我尝试使用$_POST代替$this->request->all();它没有调整任何请求参数,并按预期工作。
$_POST使用起来不安全。
请分享我的建议/想法如何做到这一点,而不削减任何价值?

zzzyeukh

zzzyeukh1#

你有HTTP中间件,其中一个会修剪数据。https://github.com/laravel/laravel/blob/9ae75b58a1ffc00ad36bf1e877fe2bf9ec601b82/app/Http/Kernel.php#L22

/**
 * The application's global HTTP middleware stack.
 *
 * These middleware are run during every request to your application.
 *
 * @var array<int, class-string|string>
 */
protected $middleware = [
    // \App\Http\Middleware\TrustHosts::class,
    \App\Http\Middleware\TrustProxies::class,
    \Illuminate\Http\Middleware\HandleCors::class,
    \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

您可以看到有一个\App\Http\Middleware\TrimStrings::class,您必须删除它。

cdmah0mi

cdmah0mi2#

输入值的调整恰好是由于一个活动的全局中间件,确切地说是\App\Http\Middleware\TrimStrings中间件。
既然你说你不想禁用整个应用程序的中间件,你应该考虑只禁用一个或多个特定路由的中间件。你可以通过两种方式来做到这一点:
1.单一途径:

Route::post('my-route', 'MyRouteController@myRoute')->withoutMiddleware(['trimStrings']);

1.路径组:

Route::withoutMiddleware([\App\Http\Middleware\TrimStrings::class])->group(function () {
    Route::post('my-route', 'MyRouteController@myRoute');

    // Add additional routes within this group.
});

但是需要注意的是,withoutMiddleware方法只能删除路由中间件,不适用于全局中间件,由于TrimStrings默认为全局中间件,所以仍然需要从app/Http/Kernel.php文件的$middleware数组中删除,并为所有不想删除的路由重新手工添加TrimStrings中间件,为此,使用选项2中演示的类似路由组语法,如下所示:

Route::middleware([\App\Http\Middleware\TrimStrings::class])->group(function () {
    // Place all the routes you already had here.
});

您还可以查看文档:https://laravel.com/docs/10.x/middleware#excluding-middleware

相关问题