Home » Php » php – Getting GET "?" variable in laravel

php – Getting GET "?" variable in laravel

Posted by: admin April 23, 2020 Leave a comment


Hello I’m creating API using REST and Laravel following this article.

Everything works well as expected.

Now, I want to map GET request to recognise variable using “?”.

For example: domain/api/v1/todos?start=1&limit=2

Below is the content of my routes.php :

Route::any('api/v1/todos/(:num?)', array(
    'as'   => 'api.todos',
    'uses' => '[email protected]'

my controllers/api/todos.php :

class Api_Todos_Controller extends Base_Controller {

    public $restful = true;

    public function get_index($id = null) {
        if(is_null($id)) {
            return Response::eloquent(Todo::all(1));

        } else {
            $todo = Todo::find($id);
            if (is_null($todo)) {
                return Response::json('Todo not found', 404);
            } else {
                return Response::eloquent($todo);   

How to recognise get parameter using “?” ?

How to&Answers:

Take a look at the $_GET and $_REQUEST superglobals. Something like the following would work for your example:

$start = $_GET['start'];
$limit = $_GET['limit'];


According to this post in the laravel forums, you need to use Input::get(), e.g.,

$start = Input::get('start');
$limit = Input::get('limit');

See also: http://laravel.com/docs/input#input


I haven’t tested on other Laravel versions but on 5.3-5.8 you reference the query parameter as if it were a member of the Request class.

1. Url


2. In a route callback or controller action using magic method Request::__get()

Route::get('/path', function(Request $request){

//or in your controller
public function foo(Request $request){

//NOTE: If you are wondering where the request instance is coming from, Laravel automatically injects the request instance from the IOC container

3. Default values

We can also pass in a default value which is returned if a parameter doesn’t exist. It’s much cleaner than a ternary expression that you’d normally use with the request globals

   //wrong way to do it in Laravel
   $page = isset($_POST['page']) ? $_POST['page'] : 1; 

   //do this instead
   $request->get('page', 1);

   //returns page 1 if there is no page
   //NOTE: This behaves like $_REQUEST array. It looks in both the
   //request body and the query string
   $request->input('page', 1);

4. Using request function

$page = request('page', 1);
//returns page 1 if there is no page parameter in the query  string
//it is the equivalent of
$page = 1; 
   $page = $_GET['page'];

The default parameter is optional therefore one can omit it

5. Using Request::query()

While the input method retrieves values from entire request payload (including the query string), the query method will only retrieve values from the query string

//this is the equivalent of retrieving the parameter
//from the $_GET global array
$page = $request->query('page');

//with a default
$page = $request->query('page', 1);

6. Using the Request facade

$page = Request::get('page');

//with a default value
$page = Request::get('page', 1);

You can read more in the official documentation https://laravel.com/docs/5.8/requests


We have similar situation right now and as of this answer, I am using laravel 5.6 release.

I will not use your example in the question but mine, because it’s related though.

I have route like this:

Route::name('your.name.here')->get('/your/uri', '[email protected]');

Then in your controller method, make sure you include

use Illuminate\Http\Request;

and this should be above your controller, most likely a default, if generated using php artisan, now to get variable from the url it should look like this:

  public function someMethod(Request $request)
    $foo = $request->input("start");
    $bar = $request->input("limit");

    // some codes here

Regardless of the HTTP verb, the input() method may be used to retrieve user input.


Hope this help.


This is the best practice. This way you will get the variables from
GET method as well as POST method

    public function index(Request $request) {
//OR if you want few of them then
    public function index(Request $request) {
//OR if you want all except few then
    public function index(Request $request) {


Query params are used like this:

use Illuminate\Http\Request;

class MyController extends BaseController{

    public function index(Request $request){
         $param = $request->query('param');


In laravel 5.3 $start = Input::get('start'); returns NULL

To solve this

use Illuminate\Support\Facades\Input;

//then inside you controller function  use

$input = Input::all(); // $input will have all your variables,  

$start = $input['start'];
$limit = $input['limit'];


In laravel 5.3

I want to show the get param in my view

Step 1 : my route

Route::get('my_route/{myvalue}', '[email protected]');

Step 2 : Write a function inside your controller

public function myfunction($myvalue)
    return view('get')->with('myvalue', $myvalue);

Now you’re returning the parameter that you passed to the view

Step 3 : Showing it in my View

Inside my view you i can simply echo it by using

{{ $myvalue }}

So If you have this in your url[email protected]

Then it will print [email protected] in you view file

hope this helps someone.