gpt4 book ai didi

php - 在 laravel 中间件中修改输入

转载 作者:搜寻专家 更新时间:2023-10-31 21:05:05 25 4
gpt4 key购买 nike

某些服务向我的站点发出 HTTP 请求并传递一些输入。这个输入对我来说有一点点错误的结构,所以我正在尝试修改它。

我制作了一个中间件并将这个中间件附加到我的路由中。句柄方法如下所示:

public function handle($request, Closure $next)
{
$input = $request->all();

// Input modification

$request->replace($input);
\Log::info($request->all()); // Shows modified request

return $next($request);
}

但是在我的 Controller 中我得到了旧的输入。另外我有点困惑,因为我也使用 FormRequest,而且我意识到这两个请求是不同的实体。那么如何修改中间件中的输入呢?

最佳答案

我不知道您遇到的具体问题是什么,但我会向您展示我是如何让它发挥作用的,它可能会解决您的问题:

app/Http/Middleware/TestMiddleware.php

<?php namespace App\Http\Middleware;

use Closure;

class TestMiddleware
{

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$input = $request->all();

if (isset($input['mod'])) {
list($input['int'], $input['text']) = explode('-', $input['mod']);
unset($input['mod']);
// Input modification
$request->replace($input);

\Log::info($request->all()); // Shows modified request
}

return $next($request);
}

}

app/Http/Kernel.php

protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'App\Http\Middleware\VerifyCsrfToken',
Middleware\TestMiddleware::class, // this line added
];

app/Http/routes.php

 Route::get('/test', ['uses' => 'TestController@index']);

app/Http/Requests/SampleRequest.php

<?php namespace App\Http\Requests;

class SampleRequest extends Request
{
public function rules()
{
return [
'int' =>
[
'required',
'integer'
],
'text' => [
'max: 5',
]
];
}
}

app/Http/Controllers/TestController.php

<?php namespace App\Http\Controllers;

use App\Http\Requests;


class TestController extends \Illuminate\Routing\Controller
{

public function index(Requests\SampleRequest $request)
{
dd($request->all());

}
}

在控制台中,我运行了 composer dump-autoload

现在,当我运行以下 url 时:

http://testproject.app/test?mod=23-tav

我正在从 dd 进入 Controller :

array:2 [▼
"text" => "tav"
"int" => "23"
]

正如预期的那样,当我运行例如 http://testproject.app/test?mod=abc-tav 我被重定向到主页,因为数据没有通过验证来自 SampleRequest(int 不是整数)

关于php - 在 laravel 中间件中修改输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33975721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com