一尘不染

Laravel Request :: all()不应被静态调用

php

在Laravel,我想打电话给$input = Request::all();一个store()在我的控制器的方法,但我发现了以下错误:

从不兼容的上下文中Illuminate\Http\Request::all()假设$this,非静态方法不应静态调用

有什么帮助找出解决此问题的最佳方法吗?(我正在观看Laracast)


阅读 626

收藏
2020-05-29

共1个答案

一尘不染

该错误消息是由于呼叫未通过Request立面而导致的。

更改

use Illuminate\Http\Request;

use Request;

它应该开始工作。

在config /
app.php文件中,您可以找到类别名的列表。在那里,您将看到基类Request已被别名为Illuminate\Support\Facades\Request该类。因此,要Request在命名空间文件中使用外观,您需要指定使用基类:use Request;

编辑

由于这个问题似乎吸引了一些访问者,自Laravel 5正式发布以来,我想对答案进行一些更新。

尽管以上内容在技术上仍然正确并且可以使用,但该use Illuminate\Http\Request;语句包含在新的Controller模板中,以帮助推动开发人员朝着使用依赖项注入而不是依赖Facade的方向发展。

当将Request对象注入构造函数(或方法,如Laravel
5中可用)时,Illuminate\Http\Request应该注入的是对象,而不是Request立面。

因此,最好不要使用Controller模板以使其与Request门面配合使用,而是建议使用给定的Controller模板并转向使用依赖项注入(通过构造函数或方法)。

方法示例

<?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');
    }
}
2020-05-29