问题地址(shinbashi回答): https://github.com/z-song/laravel-admin/issues/899
相关问题地址: https://github.com/z-song/laravel-admin/issues/2889
首先该问题出现的原因是因为原框架不支持在hasMany
中使用内嵌方法embeds
,至于为什么没有加入到新版本中,原因也不知道了,这里提供仅仅提供解决方法(原答案参照第一条链接中的回答):
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;
}
}
Admin/bootstrap.php
,新增如下Encore\Admin\Form::extend('nestedEmbeds', \App\Admin\Extensions\NestedEmbeds::class);
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
,导致好半天不成功,前后要一致,警惕粗心。