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

如何在Backpack中创建同时包含两个输入属性的自定义多语言字段?

Backpack同页多语言字段实现方案

结论先行

你要的需求完全可以实现,不需要修改Backpack核心或翻译包源码,以下是两种最低成本的实现路径:

方案1:用内置分组字段快速实现(无需自定义开发,推荐优先用)

直接在CRUD控制器的操作方法内定义分组字段,将两个语言版本的输入框封装到同一个视觉组内,天然支持同页并排展示:

// 写在setupCreateOperation/setupUpdateOperation方法中
CRUD::addField([
    'name' => 'name_trans_group',
    'type' => 'group',
    'label' => '名称多语言内容',
    'fields' => [
        [
            'name' => 'name_english',
            'label' => '英文',
            'type' => 'text',
            'wrapper' => ['class' => 'form-group col-md-6'],
        ],
        [
            'name' => 'name_french',
            'label' => '法语',
            'type' => 'text',
            'wrapper' => ['class' => 'form-group col-md-6'],
        ],
    ],
]);

优势:无额外开发成本,渲染出来的两个输入框左右并排,和单个字段的视觉体验一致,后端直接接收两个字段值适配翻译包存储逻辑即可

方案2:封装为独立自定义字段(适合多场景复用)

如果你需要在多个CRUD里用到同类多语言字段,可以封装成单个独立字段类型,实现单个字段对应两个输入框的效果:

  1. 新建自定义字段模板:在resources/views/vendor/backpack/crud/fields目录下创建dual_lang_text.blade.php,写入以下代码:
@php
    // 支持自定义语言后缀,默认用英法
    $suffixes = $field['lang_suffixes'] ?? ['english', 'french'];
@endphp
<div @include('crud::inc.field_wrapper_attributes') >
    <label>{!! $field['label'] !!}</label>
    <div class="row">
        @foreach($suffixes as $suffix)
            <div class="col-md-6 mb-0">
                <input 
                    type="text"
                    name="{{ $field['name'] }}_{{ $suffix }}"
                    value="{{ old($field['name'].'_'.$suffix) ?? ($entry->{$field['name'].'_'.$suffix} ?? '') }}"
                    class="form-control"
                    placeholder="{{ ucfirst($suffix) }}内容"
                >
            </div>
        @endforeach
    </div>
</div>
  1. 在CRUD中直接调用该字段即可:
CRUD::addField([
    'name' => 'name',
    'type' => 'dual_lang_text',
    'label' => '名称',
    // 可选:自定义语言后缀
    // 'lang_suffixes' => ['english', 'french'],
]);

后端适配注意点

你只需要在模型的saving事件或者CRUD的保存钩子中,把提交的带后缀字段值,转换为官方translation包要求的存储格式即可,完全兼容原有翻译包的功能。

关于你问的「是否可以让单个Backpack字段实际对应两个输入字段」:完全可以,Backpack的字段本质是前端渲染模板,单个模板内可以输出任意数量的输入框,只要name属性符合后端接收规则,没有额外限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:45:03