【问题标题】:Cannot Create Post无法创建帖子
【发布时间】:2020-04-01 06:14:21
【问题描述】:

我无法创建帖子,我是初学者,如果我的问题听起来很愚蠢,请提前道歉

这是我提交之前的表单图片:-

点击提交后的图片如下:-

我似乎找不到任何错误

这是我的控制器:-

  public function store(Request $request)
    {
      $data = request()->validate([
        'title' => 'required',
        'body' => 'required',
      ]);

       auth()->user()->profile()->post()->create($data
       );
       return redirect('/h');

我确实需要在其中传入“user_id”

请提前帮助谢谢

【问题讨论】:

  • 您在填写表格吗?这是验证;本身没有记录错误,但是如果验证失败,->validate() 之后的代码将不会运行...简而言之,您的代码完全按预期工作。
  • 我假设您检查了表单元素的名称以确保它们匹配?也可以使用 auth 对象在后端获取用户 id
  • $post = new Post($data); auth()->user()->profile()->post()->create($post);将创建帖子,我建议您在用户表和帖子表之间创建关系不要通过配置文件表。
  • @umefarooq 我已经在用户和帖子和个人资料之间创建了一个关系,我确实使用了你的 "$post = new Post($data); auth()->user() ->profile()->post()->create($post); will create post" 现在我遇到的错误是 Call to undefined method App\User::post()
  • @CodeJunkie 没有显示任何错误的原因是名称不正确,您能告诉我您希望我如何使用身份验证功能

标签: php laravel controller


【解决方案1】:

您的控制器验证似乎正确。

由于请求不包含“title”和“body”值,您将被重定向回表单。根据您的验证数组,这些值是“必需的”。

将此行添加到您的控制器以进行调试并查看请求实际包含的内容:

dd(request()->all());

在您看来,请确保您的 html 表单输入正确设置了各自的名称属性:

<form method="POST" action="/your-route">
  @csrf
  <input name="title" ...>
  <input name="body" ...>
</form>

并回答您的最后一个问题:不,您不需要将user_id 添加到您的 $data 数组中; Laravel 会为你做这件事,因为你将 create() 方法从经过身份验证的用户实例链接到这一行:auth()-&gt;user()-&gt;profile()-&gt;post()-&gt;create($data);

您也可以直接从 Post 类调用 create() 方法,在这种情况下应指定 user_id:

Post::create([
    'user_id' => 1,
    'title' => 'My title',
    'body' => 'My body',
]);

【讨论】:

  • 你是对的,问题出在输入名称中,但现在我已将我的代码更改为 $post = new Post($data); auth()-&gt;user()-&gt;post()-&gt;create($post); 并将 protected $fillable = ['title', 'body']; 添加到我的 Post 模型中,并且我的错误现在得到的是 调用未定义的方法 App\User::post()
  • 使用$post = new Post($data); $post-&gt;save() auth()-&gt;user()-&gt;posts()-&gt;create($data);,但不能同时使用。它是相同的,只是语法不同。您的错误是说用户模型没有名为 post() 的方法。由于我想象一个用户有很多帖子s,因此您在用户模型上的关系方法必须称为 posts() 复数并带有“s”。
猜你喜欢
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多