Я использую Laravel 5 и пытаюсь получить все входные переменные POST в контроллере, например:
public function add_question()
{
return Request::all();
}
Итак, я получаю эти ошибки -
Что я делаю неправильно?
Я использую Laravel 5 и пытаюсь получить все входные переменные POST в контроллере, например:
public function add_question()
{
return Request::all();
}
Итак, я получаю эти ошибки -
Что я делаю неправильно?
Попробуйте следующее:
use Illuminate\Support\Facades\Request;
public function add_question(Request $request)
{
return $request->all();
}
Кажется, есть большая ошибка почти во всех текущих ответах в том, что они показывают ОБА GET и POST данные. НЕ ТОЛЬКО ПОЧТОВЫЕ данные.
Проблема с вашим кодом в качестве принятого упомянутого ответа заключается в том, что вы не импортировали фасад. Это можно импортировать, добавив в начало следующее:
use Request;
public function add_question(Request $request)
{
return Request::post();
}
Вы также можете использовать метод глобального запроса следующим образом (упомянутый @Canaan Etai), импорт не требуется:
request()->post();
Тем не менее, лучший подход к импорту Request
в методе контроллера - это внедрение зависимостей, как указано в ответе @shuvrow:
use Illuminate\Http\Request;
public function add_question(Request $request)
{
return $request->post();
}
Более подробную информацию о DI можно найти здесь:
В любом случае вы должны использовать:
// Show only POST data
$request->post(); // DI
request()->post(); // global method
Request::post(); // facade
// Show only GET data
$request->query(); // DI
request()->query(); // global method
Request::query(); // facade
// Show all data (i.e. both GET and POST data)
$request->all(); // DI
request()->all(); // global method
Request::all(); // facade
Вы должны использовать фасад, а не Illuminate\Http\Request
. Импортируйте его вверху:
use Request;
И убедитесь, что он не конфликтует с другим классом.
Изменение: этот ответ был написан несколько лет назад. Теперь я поддерживаю подход, предложенный Шувровым ниже.
Для тех, кто пришел сюда в поисках "как получить все входные данные POST" только
класс Illuminate\Http\Request
происходит от Symfony\Component\HttpFoundation\Request
, в котором есть две переменные класса, в которых хранятся параметры запроса.
public $query
- для параметров GET
public $request
- для параметров POST
Использование: чтобы получить только данные поста
$request = Request::instance();
$request->request->all(); //Get all post requests
$request->request->get('my_param'); //Get a post parameter
Источник здесь
EDIT
Для Laravel> = 5.5 вы можете просто вызвать $request->post()
или $request->post('my_param')
, который внутренне вызывает $request->request->all()
или $request->request->get('my_param')
соответственно.
Вы можете получить все данные поста в этой функции: -
$postData = $request->post();
и если вы хотите, чтобы определенное поле, то используйте его: -
$request->post('current-password');
Это должно быть как минимум:
public function login(Request $loginCredentials){
$data = $loginCredentials->all();
return $data['username'];
}
Вы можете использовать его
$params = request()->all();
без
import Illuminate\Http\Request
ИЛИ
use Illuminate\Support\Facades\Request
ИЛИ другой.
лучше использовать зависимость, чем для его аттестации классу.
public function add_question(Request $request)
{
return Request::all();
}
или если вы предпочитаете использовать входную переменную, используйте
public function add_question(Request $input)
{
return $input::all();
}
теперь вы можете использовать глобальный метод запроса, предоставляемый laravel
request()
например, чтобы получить первое имя ввода формы.
request()->first_name
// or
request('first_name')