In Laravel, how can I get *only* POST parameters?

NeuronQ picture NeuronQ · Dec 8, 2014 · Viewed 11.9k times · Source

I know that one can use $request->get('my_param') or Input::get('my_param') to get a POST or GET request parameter in Laravel (I'm toying with v5/dev version now, but it's the same for 4.2).

But how can I make sure that my my_param came via a POST parameter and was not just from a ?my_param=42 appended to the URL? (besides reverting to the ol' $_POST and $_GET superglobals and throwing testability out the window)

(Note: I also know that the Request::get method will give me the POST param for a POST request, if both a POST an URL/GET param with the same name exist, but... but if the param land in via the url query string instead, I want a Laravel-idiomatic way to know this)

Answer

lukasgeiter picture lukasgeiter · Dec 8, 2014

In the class Illuminate\Http\Request (or actually the Symphony class it extends from Symfony\Component\HttpFoundation\Request) there are two class variables that store request parameters.

public $query - for GET parameters

public $request - for POST parameters

Both are an instance of Symfony\Component\HttpFoundation\ParameterBag which implements a get method.

Here's what you can do (although it's not very pretty)

$request = Request::instance();
$request->request->get('my_param');