laravel 表单验证器的问题

在使用laravel 做文章添加时。

验证器 TopicRequest.php

public function rules(){
  return [
        // CREATE ROLES
        'title'=>'required',
        'category_id'=>'required',
        'body'=>'required',
        'user_id'=>'required'
    ];
 }

控制器TopicController.php

    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', '文章创建成功.');
    }
user_id 是根据登录用户的id产生的,并不想从前段页面表单中传隐藏域获得.
这里有一个问题:
文章新建每次都提示user_id不能为空.
这里代码需要怎么修改了,尤其控制器TopicController?
laravel 的验证器运行机理是怎样的,这里是不是需要将user_id 加入TopicRequest对象中,请高手赐教

题目描述

题目来源及自己的思路

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 2.7k
3 个回答

执行流程 : 访问网页 > TopicRequest > store ,所以说在 TopicRequest 的时候当然你获取不到相关的user_id啊,你注意

Laravel 先到验证器里验证,没问题了才进入控制器中。估计你提交表单的时候没有传入 user_id 字段,所以每次都会提示 user_id 不能为空。

解决方法:
验证器里不需要对 user_id 进行验证,Laravel 将已登录用户的信息存在 session 里,使用 \Auth::id()\Auth::user() 取用就行。

我觉得Model中Topic.php中的$fillable是不是把user_id写进去了,去掉就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进