I want to use VacancyListRequest to pass through middleware parameters and use its rules to validate them before controller action. I know that middleware acts Pipeline pattern, but does anybody know how to use any custom type except default IlluminateHttpRequest?
Middleware
public function handle(VacancyListRequest $request, Closure $next)
{
$request = $this->analizeQuery($request);
$request = $this->formatValues($request);
$request = $this->prepareParams($request);
return $next($request);
}
Controller
public function index(VacancyListRequest $request, bool $asQuery = false)
Error
AppHttpMiddlewareVacancyBeforeVacancyIndexRequestMiddleware::handle(): Argument #1 ($request) must be of type AppHttpRequestsVacancyVacancyListRequest, IlluminateHttpRequest given,
Advertisement
Answer
You are getting that error because you are passing the $request as argument of the handle method of you middleware which is typed as VacancyListRequest instead of being of type IlluminateHttpRequest.
You should change the middleware to be like this
use IlluminateHttpRequest;
use Closure;
class VacancyListRequest
{
/**
* Handle an incoming request.
*
* @param IlluminateHttpRequest $request
* @param Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$request = $this->analizeQuery($request);
$request = $this->formatValues($request);
$request = $this->prepareParams($request);
return $next($request);
}
}
But in your controller It should be like this
// At the top of you controller file you add this use AppHttpRequestsVacancyVacancyListRequest; // And define the controller method like this public function index(VacancyListRequest $request, bool $asQuery = false)
It’s a must for the first parameter of the
handlemethod to be of typeIlluminateHttpRequestlike it defined in the docs # Defining Middleware