将自定义窗口小部件添加到十月CMS中的表单时出错

问题描述

我通过工匠命令在插件中创建了一个新的自定义小部件。

PHP artisan create:formwidget --force DavideCasiraghi.Movies ActorBox

但是当我尝试将其加载到我的fields.yaml文件中时,出现此错误

未知控件类型:actorBox

enter image description here

enter image description here

这是 /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 ...但是在该插件之外应该可以正常工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...