【发布时间】:2022-02-13 01:04:16
【问题描述】:
我想使用VacancyListRequest 来传递中间件参数,并在控制器操作之前使用它的规则来验证它们。我知道中间件是流水线模式,但是有没有人知道如何使用除默认 \Illuminate\Http\Request 之外的任何自定义类型?
中间件
public function handle(VacancyListRequest $request, Closure $next)
{
$request = $this->analizeQuery($request);
$request = $this->formatValues($request);
$request = $this->prepareParams($request);
return $next($request);
}
控制器
public function index(VacancyListRequest $request, bool $asQuery = false)
错误
App\Http\Middleware\Vacancy\BeforeVacancyIndexRequestMiddleware::handle(): 参数 #1 ($request) 必须是类型 应用\Http\Requests\Vacancy\VacancyListRequest, Illuminate\Http\Request 给定,
【问题讨论】:
-
类型转换
handle(VacancyListRequest $request, Closure $next)的原因是什么?您期望每个请求的类型都是VacancyListRequest。 -
@InsaneSkull 我想为特定类型的请求制作中间件,并在它在控制器中使用之前执行一些操作(比如一些取决于请求数据的分析内容和查询构建),然后使用这个规则此请求的特定类型(因为不想从那里移动验证和身份验证逻辑)。更多 - 我想在这种类型的请求中将一些变量从中间件传递给控制器
标签: php laravel dependency-injection laravel-8 type-hinting