Request :: all()中的未定义方法

Ger*_*rit 20 php laravel laravel-5

我尝试了Laravel.com的入门指南.

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

致命错误:调用未定义的方法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('/');
});
Run Code Online (Sandbox Code Playgroud)

jed*_*ylo 56

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

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

use Illuminate\Http\Request;
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢,但如果将这些信息放入本指南,那将会很好. (3认同)

pat*_*cus 5

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

将您的代码更改为:

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

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

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