В 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();
простой