解決laravel-admin表單在hasMany中調用embeds方法時字段被忽略的問題

問題地址(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,導致好半天不成功,前後要一致,警惕粗心。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章