request->all() 和 $request->all() 的区别?
在做教程 02 6.1时遇到的一个问题
在前面一张教程中使用了站长的代码生成器包,但是我个人觉得这样不便于学习,想自己敲一遍好加深印象,但是做到6.1新增话题这一步的时候出现了一个问题
public function store(TopicRequest $request, Topic $topic)
{
$topic->fill($request->all());
$topic->user_id = Auth::id();
$topic->save();
return redirect()->route('topics.show', $topic->id)->with('success', '帖子创建成功!');
}
这是教程里面的原代码,运行这部分代码时候发生了报错,错误如图
错误中打印的sql语句来看除了 user_id 和两个时间戳字段其他的字段都没有,然而title字段又没有设置默认值,所以报错,但是按照代码逻辑
$topic->fill($request->all());
这一步应该是把提交的参数赋值到了模型,然后我打印了一下$request->all() 和 request->all()的内容
dd($request->all(),request()->all());
[]
["_token" => "TLhFgr02WmQXe3zp1NHWI26854z2kMRJu469ckql"
"title" => "会返回返回返回"
"category_id" => "1"
"body" => "辅导费发的发的发的发的"
]
使用编辑器追踪这个 all 方法,两个追踪到的是同样的代码
public function all($keys = null)
{
$input = array_replace_recursive($this->input(), $this->allFiles());
if (! $keys) {
return $input;
}
$results = [];
foreach (is_array($keys) ? $keys : func_get_args() as $key) {
Arr::set($results, $key, Arr::get($input, $key));
}
return $results;
}
有点懵逼,是我漏了啥步骤吗,还是说 我上面的 $request 是自己创建的 TopicRequest 请求类 代码有问题? TopicRequest 类的代码 我也是按照教程中显示的一样
namespace App\Http\Requests;
use Illuminate\Http\Request;
class TopicRequest extends Request
{
public function rules()
{
switch($this->method())
{
// CREATE
case 'POST':
// UPDATE
case 'PUT':
case 'PATCH':
{
return [
'title' => 'required|min:2',
'body' => 'required|min:3',
'category_id' => 'required|numeric',
];
}
case 'GET':
case 'DELETE':
default:
{
return [];
};
}
}
public function messages()
{
return [
'title.min' => '标题必须至少两个字符',
'body.min' => '文章内容必须至少三个字符',
];
}
}
有没有大佬解答一下我的疑惑,现在是把 $request->all
换成了 request->all()
解决了问题继续学习下面的部分,但是还是很疑惑这两个有啥区别, 为啥 $request->all
获取不到
找到问题所在了,TopicRequest 这个类 继承错了,继承的是
换成
这个之后问题解决了
但是查看了 FormRequest 这个类里面 继承的基类也是
Illuminate\Http\Request
这个类难道中间有什么其他实现什么的