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()); }