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

Livewire 3多输入框数组嵌套数据绑定实现问询

Livewire 3 实现数组索引式数据绑定(video.1/video.2/video.3)的解决方案

核心思路

Livewire 3不支持的是复杂嵌套对象或多维数组的深层绑定,但对于一维数组的明确索引键绑定(如video.1)完全兼容。只需确保组件中预先初始化数组的对应索引键,即可实现预期的双向绑定效果。


1. 修改 ListingEdit 组件代码

use Livewire\Component;
use Livewire\WithFileUploads;

class ListingEdit extends Component
{
    use WithFileUploads;

    public ListingData $listing;

    // 预先初始化数组的1、2、3索引键,确保Livewire能识别绑定
    public $video = [1 => '', 2 => '', 3 => ''];

    // 验证规则保持不变,可按需补充约束
    protected $rules = [
        'video.*' => 'nullable|string|max:80',
    ];

    public function mount()
    {
        // 从模型加载现有数据(编辑场景下)
        // 假设ListingData模型对应字段为video1、video2、video3
        $this->video[1] = $this->listing->video1 ?? '';
        $this->video[2] = $this->listing->video2 ?? '';
        $this->video[3] = $this->listing->video3 ?? '';
    }

    public function save()
    {
        $this->validate();

        // 将绑定的数组值同步到模型
        $this->listing->video1 = $this->video[1];
        $this->listing->video2 = $this->video[2];
        $this->listing->video3 = $this->video[3];
        $this->listing->save();

        // 可选:添加成功提示或跳转逻辑
        session()->flash('message', '列表编辑完成');
        return redirect()->route('listings.index');
    }
}

2. 修改 Blade 视图代码

修正wire:model写法及输入框type参数错误,补充验证错误提示:

@for ($i = 1; $i <= 3; $i++)
    <div class="{{ $i != 3 ? 'mb-3' : '' }}">
        <x-input-label for="video{{ $i }}" :value="__('Video [num]', ['num' => $i])" />
        <x-text-input-post 
            id="video{{ $i }}" 
            type="text" 
            wire:model="video.{{ $i }}"
            placeholder="嵌入YouTube视频链接" 
            maxChar="80"
            autocomplete="off" 
        />
        {{-- 显示对应索引的验证错误 --}}
        @error('video.' . $i)
            <span class="text-red-500 text-sm mt-1 block">{{ $message }}</span>
        @enderror
    </div>
@endfor

关键说明

  • 组件中预先初始化$video = [1 => '', 2 => '', 3 => '']是核心:确保数组存在1、2、3这三个索引键,Livewire才能正确追踪绑定值的变化。
  • 验证规则video.*会自动覆盖所有video数组下的索引项,无需单独为每个索引编写规则。
  • 保存时直接将$video[1]、$video[2]、$video[3]同步到模型对应字段即可完成数据持久化。

内容的提问来源于stack exchange,提问作者Raden Bagus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:17:11