【问题标题】:Error adding custom widget to a form in October CMS在十月 CMS 中将自定义小部件添加到表单时出错
【发布时间】:2020-12-26 21:22:15
【问题描述】:

我已经通过 artisan 命令在插件槽中创建了一个新的自定义小部件。

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

【问题讨论】:

  • builder 插件无法识别您的FormWidget actorbox,您需要将您的规范明确告知构建器插件,以便它可以识别您的组件,请查看我的其他答案 => stackoverflow.com/questions/58019789/…
  • 嗨哈迪克,我必须在哪个文件和函数中指定它?我正在浏览你的代码,但我还不明白。
  • 它写在那里 add this code to your plugin boot method plugin.php 文件,对于其他文件你需要创建新的:)

标签: laravel octobercms octobercms-widgets


【解决方案1】:

据我所知,错误来自 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 插件不允许自定义定义的窗体小部件...但是在这个插件之外应该可以正常工作。

【讨论】:

  • 我试图用这段代码代替,但没有任何改变,我得到了同样的错误。
  • 我同意你的看法。我检查了 100 次是否有任何拼写错误,但一切似乎都是正确的。
  • 是的问题是它使用硬编码的值并且没有办法扩展它,强制你必须创建自己的CustomDesignTimeProvider 来添加你自己的值和模板=> stackoverflow.com/questions/58019789/…
猜你喜欢
  • 2017-03-22
  • 2021-08-20
  • 2016-05-18
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2014-04-08
相关资源
最近更新 更多