gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:56:03 25 4
gpt4 key购买 nike

在 Laravel 中,我试图在 Controller 中的 store() 方法上调用 $input = Request::all();,但我收到以下错误:

Non-static method Illuminate\Http\Request::all() should not be called statically, assuming $this from incompatible context

任何帮助找出纠正此问题的最佳方法? (我正在关注 Laracast)

最佳答案

错误消息是由于调用没有通过 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 模板中,以帮助插入开发人员朝着使用依赖注入(inject)而不是依赖的方向发展在立面上。

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

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

方法示例

<?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 - Laravel Request::all() 不应该被静态调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28573860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com