我尝试了Laravel.com的getting started指南。
有一章创建任务。有$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('/');
});
答案 0 :(得分:52)
您的控制器功能会注入 Illuminate \ Support \ Facades \ Request 的实例,该实例仅转发对基础请求对象的静态调用。
为了解决这个问题,您需要导入基础请求类,以便正确注入它。在 routes.php 文件的顶部添加以下内容:
use Illuminate\Http\Request;
或只是致电 Request :: all(),而不是 $ request-> all()。
答案 1 :(得分:5)
由于此代码位于routes.php文件中(未命名空间),因此注入闭包的Request
对象是Request
外观,而不是Illuminate\Http\Request
对象。 Request
外观没有all()
方法。
将您的代码更改为:
Route::post('/task', function(\Illuminate\Http\Request $request) {
// code
});
注意:您通常不会完全限定Controller方法中的Request
对象,因为控制器通常会在顶部添加use Illuminate\Http\Request;
。这就是路由文件中的函数定义可能与控制器方法定义略有不同的原因。
您可以查看this答案以获取更多信息。