問題地址(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:修改使用hasMany
和embeds
的form
方法,用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
,導致好半天不成功,前後要一致,警惕粗心。