请求中未定义的方法::all()

2022-08-30 15:27:38

我从 Laravel.com 开始尝试入门指南。

有一章 创建任务。回调有一个参数,在函数中用于获取 GET 参数。但是如果我执行该回调,我会收到错误$request$request->all()

致命错误:调用未定义的方法照亮\支持\外观\请求::all()

这是我的代码:

Route::post('/task', function(Request $request) {

    $validator = Validator::make($request->all(), [
        'name' => 'required|max:255',
    ]);

    if($validator->fails())
        redirect('/')->withInput()->withErrors($validator);

    $task = new Task();
    $task->name = $request['name'];
    $task->save();

    return redirect('/');
});

答案 1

您的控制器函数会注入一个 Illuminate\Support\Facades\Request 实例,该实例仅将静态调用转发到基础请求对象。

为了解决这个问题,您需要导入基础请求类,以便正确注入它。在路由.php文件的顶部添加以下内容:

use Illuminate\Http\Request;

或者直接调用 Request::all() 而不是 $request->all()


答案 2

由于此代码位于路由.php文件中(该文件未命名空间),因此注入到闭包中的对象是外观,而不是对象。立面没有方法。RequestRequestIlluminate\Http\RequestRequestall()

将代码更改为:

Route::post('/task', function(\Illuminate\Http\Request $request) {
    // code
});

注意:通常不要在 Controller 方法中完全限定对象,因为 Controller 通常会在顶部添加 。这就是为什么路由文件中的函数定义可能与控制器方法定义略有不同的原因。Requestuse Illuminate\Http\Request;

您可以查看答案以获取更多信息。


推荐