Получение переменной «?» В laravel

33

Здравствуйте, я создаю API, используя REST и Laravel, после этой статьи.

Все работает хорошо, как ожидалось.

Теперь я хочу отобразить запрос GET для распознавания переменной с помощью "?".

Например: domain/api/v1/todos?start=1&limit=2

Ниже приведено содержание моих маршрутов .php:

Route::any('api/v1/todos/(:num?)', array(
    'as'   => 'api.todos',
    'uses' => 'api.todos@index'
));

мои контроллеры /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);   
            }
        }
    }
}

Как распознать параметр get с помощью параметра??

Теги:
rest

7 ответов

56
Лучший ответ

Взгляните на $_ GET и $_ REQUEST суперглобалы. Для вашего примера будет работать следующее:

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

ИЗМЕНИТЬ

В соответствии с этот пост на форумах laravel, вам нужно использовать Input::get(), например,

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

Смотрите также: http://laravel.com/docs/input#input

  • 5
    Вы получаете гораздо больше функциональности от использования Input :: get, Input :: has, Input :: all, Input :: file и т. Д. Единственный раз, когда я рекомендую использовать суперглобальный, это когда вы загружаете массив файлов, тогда вы делаете нужно использовать $ _FILES.
  • 3
    Для любого, кто читает это в 2016 году, правильный способ использования Input в Laravel> v5.0 - это stackoverflow.com/a/34642837/1067293
Показать ещё 1 комментарий
15

Это довольно просто - и также применимо к запросам POST. Я не тестировал другие версии Laravel, но на 5.3-5.7 вы ссылаетесь на параметр запроса, как если бы он был членом class Request.

1. URL

http://example.com/path?page=2

2. В обратном вызове маршрутов или действии контроллера с использованием магического метода Request :: __ get()

Route::get('/path', function(Request $request){
 dd($request->page);
}); 
//NOTE: Laravel automatically inject the request instance
//output
"2"

3. Значения по умолчанию

Мы также можем передать значение по умолчанию, которое возвращается, если параметр не существует. Это спасает нас от этой троичной магии

   //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. Использование функции запроса

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

Параметр по умолчанию является необязательным, поэтому его можно опустить

5. Использование Request :: query()

В то время как метод ввода извлекает значения из всей полезной нагрузки запроса (включая строку запроса), метод запроса извлекает значения только из строки запроса

//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. Использование фасада запроса

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

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

Вы можете прочитать больше в официальной документации https://laravel.com/docs/5.7/requests

5

У нас сейчас похожая ситуация, и на данный момент я использую релиз laravel 5.6.

Я не буду использовать ваш пример в этом вопросе, но мой, потому что это связано, хотя.

У меня есть маршрут, как это:

Route::name('your.name.here')->get('/your/uri', 'YourController@someMethod');

Затем в вашем методе контроллера, убедитесь, что вы включаете

use Illuminate\Http\Request;

и это должно быть выше вашего контроллера, скорее всего, по умолчанию, если генерируется с использованием php artisan, теперь, чтобы получить переменную из URL, она должна выглядеть так:

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

    // some codes here
  }

Независимо от HTTP-глагола, метод input() может использоваться для извлечения пользовательского ввода.

https://laravel.com/docs/5.6/requests#retrieving-input

Надеюсь, это поможет.

3

Это лучшая практика. Таким образом вы получите переменные из GET, а также метод POST

    public function index(Request $request) {
            $data=$request->all();
            dd($data);
    }
//OR if you want few of them then
    public function index(Request $request) {
            $data=$request->only('id','name','etc');
            dd($data);
    }
//OR if you want all except few then
    public function index(Request $request) {
            $data=$request->except('__token');
            dd($data);
    }
2

В laravel 5.3 $start = Input::get('start'); возвращает NULL

Чтобы решить эту проблему,

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'];
2

Параметры запроса используются следующим образом:

use Illuminate\Http\Request;

class MyController extends BaseController{

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

В laravel 5.3

Я хочу показать get param в моем представлении

Шаг 1: мой маршрут

Route::get('my_route/{myvalue}', 'myController@myfunction');

Шаг 2. Запишите функцию внутри вашего контроллера.

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

Теперь вы возвращаете параметр, который вы передали в представление

Шаг 3: Отображение в моем представлении

Внутри моего взгляда вы можете просто эхо его использовать с помощью

{{ $myvalue }}

Итак, если у вас это в вашем URL

http://127.0.0.1/yourproject/refral/[email protected]

Затем он напечатает [email protected] в вашем файле

надеюсь, что это поможет кому-то.

  • 0
    То, что вы используете, это не параметр get, а фрагмент URL.
  • 1
    однажды кто-то, кому нужен фрагмент URL, будет здесь. Лучше попробовать, чем нет. Спасибо всем за информацию и downvote: x
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню