微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将自定义窗口小部件添加到十月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 ...但是在该插件之外应该可以正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?