В Laravel я пытаюсь вызвать $input = Request::all();
на метод store()
в моем контроллере, но я получаю следующую ошибку:
Нестатический метод
Illuminate\Http\Request::all()
не следует вызывать статически, предполагая$this
из несовместимого контекста
- Проверка массива изображений в Laravel 5
- Достигнут максимальный уровень гнездования функции «100», прерванный после обновления до Laravel 5.1
- Тестирование командных блоков Laravel 5 console (artisan)
- Реализация фасада перед классом Factory Laravel 5.4
- CRUD Laravel 5 как связать с уничтожением контроллера ресурсов?
Любая помощь в определении наилучшего способа исправить это? (Я следую за Ларакастом)
Сообщение об ошибке связано с вызовом, не проходящим через фасад 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();
просто