Laravel Request:: all () не следует вызывать статически
в Laravel, я пытаюсь позвонить $input = Request::all();
на store()
метод в моем контроллере, но я получаю следующую ошибку:
нестатический метод
IlluminateHttpRequest::all()
не должен вызываться статически, предполагая$this
из несовместимого контекста
любой помочь выяснить, лучший способ исправить это? (Я следую за Laracast)
6 ответов:
сообщение об ошибке вызвано тем, что вызов не проходит через
Request
фасад.изменить
use Illuminate\Http\Request;
до
use Request;
и он должен начать работать.
в config/приложения.php файл, вы можете найти список псевдонимов классов. Там вы увидите, что базовый класс
Request
имеет псевдонимIlluminate\Support\Facades\Request
класса. Из-за этого, чтобы использоватьRequest
фасад в файле с пространством имен, Необходимо указать, чтобы использовать базовый класс:use Request;
.Edit
поскольку этот вопрос, похоже, получает некоторый трафик, я хотел немного обновить ответ, так как Laravel 5 был официально выпущен.
в то время как выше все еще технически правильно и будет работать,
use Illuminate\Http\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(); } }
использовать
request()
помощник вместо этого. Вам не нужно беспокоиться оuse
заявления и, таким образом, такие проблемы не повторятся.$input = request()->all();
простой
use Illuminate\Http\Request; public function store(Request $request){ dd($request->all()); }
то же самое в контексте говоря
use Request; public function store(){ dd(Request::all()); }
я столкнулся с этой проблемой даже с
use Illuminate\Http\Request;
строки в верхней части моего контроллера. Продолжал дергать меня за волосы, пока я не понял, что делаю$request::ip()
вместо$request->ip()
. Может случиться с вами, если вы не спали всю ночь и смотрите на код в 6 утра с полуоткрытыми глазами.надеюсь, что это поможет кому-то в будущем.