You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Livewire V3 创建表单wire:model绑定对象属性为null问题

Livewire V3 创建表单时无法绑定模型字段的问题

我正在使用Livewire V3开发一个集编辑与创建功能于一体的表单,采用将模型传入mount方法、无模型时自动创建新对象的实现方式。但当使用wire:model="domain.name"进行绑定并提交表单时,系统提示name字段为null。在创建表单场景下,Livewire为何无法正确关联并赋值该字段?

组件代码

<?php

namespace App\Livewire\Site\Forms\Domains;

use Livewire\Attributes\Validate;
use Livewire\Component;
use App\Models\Domain;

class DomainForm extends Component
{
    public Domain $domain;

    public function mount(Domain $domain)
    {
        $this->domain = $domain;
    }

    public function rules()
    {
        return [
            'domain.name' => ['required']
        ];
    }

    public function submit()
    {
        $this->validate();
    }

    public function render()
    {
        return view('livewire.site.forms.domains.domain-form');
    }
}

视图代码

<x-input id="name" type="text" class="mt-1 block w-full" wire:model.defer="domain.name" placeholder="e.g: example.com" />

问题原因

  1. 路由隐式绑定的限制:当你声明Domain $domain作为mount方法参数时,Laravel的路由绑定只会在存在对应ID的情况下返回模型实例,不会自动创建空模型。如果是创建场景(路由无domain ID参数),会直接抛出404错误,而非生成空的Domain对象,导致你以为的“自动创建新对象”逻辑根本没生效。
  2. 模型可填充性缺失:即使手动创建了空模型,如果Domain模型的$fillable数组未包含name字段,Livewire无法通过wire:model为该字段赋值。

解决方法

  1. 手动处理空模型场景
    修改mount方法,允许参数为null,手动初始化新模型:

    public function mount(?Domain $domain = null)
    {
        $this->domain = $domain ?? new Domain();
    }
    

    这样路由不传domain ID时,会自动创建新的Domain实例,确保绑定有效。

  2. 配置模型可填充字段
    在App\Models\Domain中添加name到$fillable数组:

    class Domain extends Model
    {
        protected $fillable = ['name'];
    }
    
  3. 可选:简化验证规则
    利用Livewire的属性验证特性,直接在模型属性上声明验证规则,代码更简洁:

    use Livewire\Attributes\Validate;
    
    class DomainForm extends Component
    {
        #[Validate('required')]
        public Domain $domain;
    
        // 其余代码不变
    }
    

完成以上修改后,创建场景下的模型实例会被正确初始化,wire:model.defer="domain.name"能正常将输入值绑定到模型字段,提交时可通过验证。

内容的提问来源于stack exchange,提问作者Ryan H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:04:58