问题描述
PHP artisan create:formwidget --force DavideCasiraghi.Movies ActorBox
但是当我尝试将其加载到我的fields.yaml文件中时,出现此错误。
未知控件类型:actorBox
这是 /plugins/davidecasiraghi/movies/formwidgets/ActorBox.PHP
的内容<?PHP namespace DavideCasiraghi\Movies\FormWidgets;
use Backend\Classes\FormWidgetBase;
/**
* ActorBox Form Widget
*/
class ActorBox extends FormWidgetBase
{
protected $defaultAlias = 'actorBox';
public function init()
{
}
public function render()
{
$this->prepareVars();
return $this->makePartial('actorBox');
}
public function prepareVars()
{
$this->vars['name'] = $this->formField->getName();
$this->vars['value'] = $this->getLoadValue();
$this->vars['model'] = $this->model;
}
public function loadAssets()
{
$this->addCss('css/select2.css','DavideCasiraghi.Movies');
$this->addJs('js/select2.js','DavideCasiraghi.Movies');
}
/**
* @inheritDoc
*/
public function getSaveValue($value)
{
return $value;
}
}
这是在 /plugins/davidecasiraghi/movies/Plugin.PHP
中定义自定义窗口小部件的方式<?PHP namespace DavideCasiraghi\Movies;
use System\Classes\PluginBase;
class Plugin extends PluginBase
{
public function registerComponents()
{
}
public function registerSettings()
{
}
public function registerFormWidgets() {
return [
'DavideCasiraghi\Movies\FormWidgets\ActorBox' => [
'label' => 'ActorBox field','code' => 'actorBox',]
];
}
}
我已经迷失了2个小时,试图弄清楚为什么,但是我还没明白。 我想念什么?
在此主题上有类似的表格,但是我得到的错误有所不同。 October CMS : Not able to create a Form Widget
解决方法
据我所知,此方法中的错误来自RainLab.Builder插件:
public function renderControlBody($type,$properties,$formBuilder)
{
if (!in_array($type,$this->defaultControlsTypes)) {
return $this->renderUnknownControl($type,$properties);
}
return $this->makePartial('control-'.$type,[
'properties'=>$properties,'formBuilder' => $formBuilder
]);
}
它仅检查硬编码的控件类型...因此看来,Builder插件不允许自定义定义的formwidgets ...但是在该插件之外应该可以正常工作。