Здравствуйте, я создаю 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 с помощью параметра??
Взгляните на $_ 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
Это довольно просто - и также применимо к запросам POST. Я не тестировал другие версии Laravel, но на 5.3-5.7 вы ссылаетесь на параметр запроса, как если бы он был членом class
Request
.
http://example.com/path?page=2
Route::get('/path', function(Request $request){
dd($request->page);
});
//NOTE: Laravel automatically inject the request instance
//output
"2"
Мы также можем передать значение по умолчанию, которое возвращается, если параметр не существует. Это спасает нас от этой троичной магии
//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);
$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'];
Параметр по умолчанию является необязательным, поэтому его можно опустить
В то время как метод ввода извлекает значения из всей полезной нагрузки запроса (включая строку запроса), метод запроса извлекает значения только из строки запроса
//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);
$page = Request::get('page');
//with a default value
$page = Request::get('page', 1);
Вы можете прочитать больше в официальной документации https://laravel.com/docs/5.7/requests
У нас сейчас похожая ситуация, и на данный момент я использую релиз 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
Надеюсь, это поможет.
Это лучшая практика. Таким образом вы получите переменные из 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);
}
В 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'];
Параметры запроса используются следующим образом:
use Illuminate\Http\Request;
class MyController extends BaseController{
public function index(Request $request){
$param = $request->query('param');
}
В 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] в вашем файле
надеюсь, что это поможет кому-то.