Laravel Request::all() 不應該被靜止地稱呼
在Laravel中,我尝试在控制器中调用方法,但我收到以下错误:$input = Request::all();
store()
非静态方法不应静态调用,假设从不兼容的上下文中
Illuminate\Http\Request::all()
$this
有什么帮助找出纠正这个问题的最佳方法吗?(我正在关注一个Laracast)
在Laravel中,我尝试在控制器中调用方法,但我收到以下错误:$input = Request::all();
store()
非静态方法不应静态调用,假设从不兼容的上下文中
Illuminate\Http\Request::all()
$this
有什么帮助找出纠正这个问题的最佳方法吗?(我正在关注一个Laracast)
错误消息是由于调用未通过外观。Request
改变
use Illuminate\Http\Request;
自
use Request;
它应该开始工作。
在配置/应用程序.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');
}
}
请改用帮助程序。你不必担心语句,因此这种问题不会再次发生。request()
use
$input = request()->all();
简单