解决laravel-admin表单在hasMany中调用embeds方法时字段被忽略的问题

本文介绍了如何解决laravel-admin在处理hasMany关系时,使用embeds方法字段被忽略的问题。通过新建文件和类,修改特定方法,以及替换原有方法为新的调用方式来实现解决方案。在实施过程中,需要注意文件和类名的一致性,避免因粗心导致问题未解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题地址(shinbashi回答): https://github.com/z-song/laravel-admin/issues/899
相关问题地址: https://github.com/z-song/laravel-admin/issues/2889

首先该问题出现的原因是因为原框架不支持在hasMany中使用内嵌方法embeds,至于为什么没有加入到新版本中,原因也不知道了,这里提供仅仅提供解决方法(原答案参照第一条链接中的回答):

步骤1:新建文件夹和类Admin/Extensions/NestedEmbeds.php,内容如下
<?php
namespace App\Admin\Extensions;


use Encore\Admin\Form\EmbeddedForm;
use Encore\Admin\Form\Field\Embeds;

class NestedEmbeds extends Embeds
{
    protected $view = 'admin::form.embeds';

    protected function buildEmbeddedForm()
    {
        $form = new EmbeddedForm($this->elementName);

        $form->setParent($this->form);

        call_user_func($this->builder, $form);

        $form->fill($this->getEmbeddedData());

        return $form;
    }
}
步骤2:修改Admin/bootstrap.php,新增如下
Encore\Admin\Form::extend('nestedEmbeds', \App\Admin\Extensions\NestedEmbeds::class);
步骤3:修改使用hasManyembedsform方法,用nestedEmbeds方法替代embeds方法,例如
protected function form()
{
    $form = new Form(new Game);
    
    $form->hasMany('modules', function (NestedForm $nestedForm)
    {
        $nestedForm->nestedEmbeds('extra', '附录信息', function ($form) {
            //此处内容使用embeds方法在提交时会被忽略,改为nestedEmbeds方法
        });
    });
    return $form;
}

建议修改完仔细核对文件名和类名前后是否不一致,个人犯了个错,文件夹件命名为Extension,后面调用的都是Extensions,导致好半天不成功,前后要一致,警惕粗心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值