【问题标题】:Undefined Method in Request::all()Request::all() 中的未定义方法
【发布时间】:2016-04-13 00:26:39
【问题描述】:

我试试 Laravel.com 的 getting started 指南。

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

致命错误:调用未定义的方法 Illuminate\Support\Facades\Request::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('/');
});

【问题讨论】:

  • 在文件顶部包含use Illuminate\Http\Request;

标签: php laravel laravel-5


【解决方案1】:

由于此代码位于未命名空间的 routes.php 文件中,因此注入闭包的 Request 对象是 Request 外观,而不是 Illuminate\Http\Request 对象。 Request 门面没有 all() 方法。

将您的代码更改为:

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

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

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

【讨论】:

    【解决方案2】:

    您的控制器函数被注入一个 Illuminate\Support\Facades\Request 实例,该实例仅将静态调用转发到底层 request 对象。

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

    use Illuminate\Http\Request;
    

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

    【讨论】:

    • 谢谢,但如果能将这些信息放入本指南就更好了。
    • @Gerrit 没有明确的解释,但是在指南中显示的路由文件中有一个use Illuminate\Http\Request;
    • @Jed 谢谢,'OR' 部分解决了我的问题 :)
    猜你喜欢
    • 2023-03-24
    • 2013-11-05
    • 1970-01-01
    • 2014-11-08
    • 2023-03-21
    • 2014-03-26
    • 2016-04-18
    • 2016-11-18
    • 1970-01-01
    相关资源
    最近更新 更多