当前位置: 首页 > 知识库问答 >
问题:

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

陈坚
2023-03-14

在Laravel中,我试图在我的控制器中的store()方法上调用$输入=请求::all();,但我得到以下错误:

假设$this来自不兼容的上下文,则不应静态调用非静态方法illighted\Http\Request::all()

有什么能帮助找出纠正这种情况的最好方法吗?(我跟着一个Laracast)

共有3个答案

洪星文
2023-03-14

使用Laravel的magic injection将请求对象注入控制器,然后以非静态方式访问该函数。Laravel将自动向自动加载的类中注入具体的依赖项

class MyController() 
{

   protected $request;

   public function __construct(\Illuminate\Http\Request $request)
   {
       $this->request = $request;
   }

   public function myFunc()
   {
       $input = $this->request->all();
   }

}
严瀚昂
2023-03-14

请改用request()helper。您不必担心use语句,因此此类问题不会再次发生。

$input = request()->all();

简单的

巩俊远
2023-03-14

错误消息是由于调用未通过请求门面造成的。

改变

use Illuminate\Http\Request;

use Request;

它应该开始工作了。

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

由于这个问题似乎获得了一些流量,我想在Laravel 5正式发布后更新一下答案。

虽然上述内容在技术上仍然正确并且可以使用,use-illumb\Http\Request 语句包含在新的控制器模板中,以帮助开发人员朝着使用依赖注入而不是依赖外观的方向前进。

将请求对象注入构造函数(或方法,如Laravel 5中提供的)时,应该注入的是illighted\Http\Request对象,而不是Requestfacade。

因此,与其将Controller模板更改为使用请求门面,不如建议使用给定的Controller模板,并转向使用依赖注入(通过构造函数或方法)。

示例via方法

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

 类似资料:
  • 我最近对 PHP 5.4 进行了更新,但收到有关静态和非静态代码的错误。 这是错误: 这是第371行: 我希望有人能帮忙。

  • 我正在使用存储库模式并尝试建立模型之间的关系。当我尝试运行存储()方法(在控制器中),该方法试图使用用户()方法(与方模型建立关系)时,我收到以下错误消息: 非静态方法不应该静态调用::user(),假设$this来自不兼容的上下文 我不明白为什么在尝试运行user()relationship方法时会出现此错误,但所有其他方法(包括$this- 以下是相关代码:

  • 我一直试图用我的验证代码进行php pear验证,但我收到的都是严格标准错误--问题是什么?我如何修复它? 电子邮件验证.php

  • PHP严格标准:不应在第33行的/web/sites/blah/somescript.PHP中静态调用非静态方法pear::iserror() 我在MDB2上看到了类似的错误。稍后再详细介绍。 somescript.php: 问题 是否有不同的方法来调用而不会产生错误?

  • 问题内容: 在Laravel,我想打电话给一个在我的控制器的方法,但我发现了以下错误: 从不兼容的上下文中假设,非静态方法不应静态调用 有什么帮助找出解决此问题的最佳方法吗?(我正在观看Laracast) 问题答案: 该错误消息是由于呼叫未通过立面而导致的。 更改 至 它应该开始工作。 在config / app.php文件中,您可以找到类别名的列表。在那里,您将看到基类已被别名为该类。因此,要在

  • 我正在尝试在varGrant CentOS VM上本地运行一个codegniter站点。我已经下载了所有文件,并设置了yaml/host文件等。 我在屏幕上看到这个错误。 遇到 PHP 错误 严重性:8192 消息:非静态方法 MY_Loader::d efine_module() 不应静态调用,假设$this来自不兼容的上下文 文件名:controllers/Front _ controller