Laravel Request :: all()不应该被静态调用
在Laravel中,我试图调用$input = Request::all();
在我的控制器中的store()
方法,但我收到以下错误:
非静态方法
Illuminate\Http\Request::all()
不应被静态调用,假设$this
来自不兼容的上下文
任何帮助找出解决这个问题的最佳方法? (我正在关注一个Laracast)
该错误消息是由于呼叫没有通过Request
外观。
更改
use Illuminate\Http\Request;
至
use Request;
它应该开始工作。
在config / app.php文件中,您可以find类别别名列表。 在那里,你会看到基类Request
被别名为Illuminate\Support\Facades\Request
类。 因此,要在名称空间文件中使用Request
facade,需要指定使用基类: use Request;
。
编辑
由于这个问题似乎得到了一些stream量,我想从Laravel 5正式发布以来稍微更新一些答案。
虽然以上技术上仍然正确,并将工作, use Illuminate\Http\Request;
语句包含在新的Controller模板中,以帮助推动开发人员使用dependency injection而不依赖于Facade。
将Request对象注入到构造函数(或Laravel 5中提供的方法)中时,应该注入的是Illuminate\Http\Request
对象,而不是Request
facade。
因此,不要更改Controller模板以使用Request facade,最好使用给定的Controller模板,并转向使用dependency injection(通过构造函数或方法)。
通过方法举例
<?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()); }