Skip to content
Advertisement

Laravel – Middleware custom typed Request parameter

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 handle method to be of type IlluminateHttpRequest like it defined in the docs # Defining Middleware

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement