Laravel Request :: all () не следует называть статически

В Laravel я пытаюсь вызвать $input = Request::all(); на метод store() в моем контроллере, но я получаю следующую ошибку:

Нестатический метод Illuminate\Http\Request::all() не следует вызывать статически, предполагая $this из несовместимого контекста

Любая помощь в определении наилучшего способа исправить это? (Я следую за Ларакастом)

Сообщение об ошибке связано с вызовом, не проходящим через фасад Request .

+ Изменить

 use Illuminate\Http\Request; 

к

 use Request; 

и он должен начать работать.

В файле config / app.php вы можете найти список псевдонимов классов. Там вы увидите, что Request базового класса был псевдонимом класса Illuminate\Support\Facades\Request . Из-за этого, чтобы использовать фасад Request в файле с именами, вам нужно указать, использовать базовый класс: use Request; ,

редактировать

Поскольку этот вопрос, кажется, получает некоторый трафик, я хотел немного обновить ответ с тех пор, как был официально выпущен Laravel 5.

Хотя выше все еще технически корректно и будет работать, use Illuminate\Http\Request; заявление включено в новый шаблон контроллера, чтобы помочь толчкам разработчиков в направлении использования инъекции зависимостей и полагаться на фасад.

При вводе объекта Request в конструктор (или методы, как доступно в Laravel 5), это объект Illuminate\Http\Request который должен быть введен, а не фасад Request .

Таким образом, вместо изменения шаблона контроллера для работы с фасадом запроса лучше рекомендуется работать с данным шаблоном контроллера и двигаться в направлении использования инъекции зависимостей (через конструктор или методы).

Пример с помощью метода

 <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class UserController extends Controller { /** * Store a newly created resource in storage. * * @param Illuminate\Http\Request $request * @return Response */ public function store(Request $request) { $name = $request->input('name'); } } 

Пример через конструктор

 <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class UserController extends Controller { protected $request; public function __construct(Request $request) { $this->request = $request; } /** * Store a newly created resource in storage. * * @return Response */ public function store() { $name = $this->request->input('name'); } } 

Внесите объект запроса в контроллер, используя магическую инъекцию Laravel, а затем получите доступ к функции нестатически. Laravel автоматически добавит конкретные зависимости в автозагружаемые классы

 class MyController() { protected $request; public function __construct(\Illuminate\Http\Request $request) { $this->request = $request; } public function myFunc() { $input = $this->request->all(); } } 
 use Illuminate\Http\Request; public function store(Request $request){ dd($request->all()); } 

это то же самое в контексте, говорящем

 use Request; public function store(){ dd(Request::all()); } 

вместо этого используйте помощник request() . Вам не нужно беспокоиться об use утверждений, и, таким образом, подобные проблемы не повторится.

 $input = request()->all(); 

просто