谁能帮我找出保存功能的问题并指导我如何解决它?

问题描述 投票:0回答:1

背景

我正在开发一个 Laravel 应用程序,我在其中实现了一个 Livewire 组件来创建和保存帖子。但是,我遇到了保存功能无法按预期工作的问题。以下是 Blade 文件、Livewire 组件和 Post 模型的相关代码片段。

问题

我面临的问题是,当我单击“提交”按钮时,Livewire 组件中的 daftar 方法没有被触发,并且表单数据没有保存到数据库中。我已确保 Livewire 组件已正确定义、绑定到表单并处理表单提交,但保存功能未按预期工作。

代码

刀片锉刀

这是 Blade 文件,其中有一个表单用于输入帖子的标题和描述以及用于提交表单的按钮。

<x-app-layout>
<div>
    <x-input type="text" id="title" name="title" wire:model="title"/>
    <x-input type="text" id="description" name="description" wire:model="description"/>
    <x-button wire:click="daftar()" type="button">Submit</x-button>
</div>
</x-app-layout>

Livewire 组件文件

这是 Livewire 组件文件,我在其中使用 daftar 方法定义了 PostForm 组件,以处理表单提交并将发布数据保存到数据库。

<?php

namespace App\Livewire\Post\Form;

use App\Models\Post;
use Livewire\Component;

class PostForm extends Component
{
    public $title;
    public $description;

    public function daftar()
    {
        $this->validate([
            'title' => 'required|string|max:255',
            'description' => 'required|string',
        ]);

        $post = new Post();
        $post->title = $this->title;
        $post->description = $this->description;
        $post->user_id = auth()->id();
        $post->save();

        session()->flash('success', 'Post successfully added.');
        return redirect()->back();
    }

    public function render()
    {
        return view('livewire.post-form');
    }
}

模型文件

这是 Post 模型的模型文件,我在其中使用 $fillable 属性定义了模型,以指定可以批量分配哪些模型属性。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'description',
        'user_id',
    ];

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
php laravel
1个回答
0
投票

如果您想实际将记录保存在数据库中,我相信提交操作应该在表单属性中发生,如下所示:

<form method="post" enctype="multipart/form-data" wire:submit="save">

完成此操作后,我会对经过验证的记录执行 dd(),然后保存它们,只是为了查看它是否命中了该方法并通过了验证

另外,如果您要保存记录,我会遵守命名约定并将名称从“daftar”更改为“save”。

© www.soinside.com 2019 - 2024. All rights reserved.