Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 将自定义小部件添加到表单时出错_Laravel_Octobercms_Octobercms Widgets - Fatal编程技术网

Laravel 将自定义小部件添加到表单时出错

Laravel 将自定义小部件添加到表单时出错,laravel,octobercms,octobercms-widgets,Laravel,Octobercms,Octobercms Widgets,我通过artisan命令在插件中创建了一个新的自定义小部件 php artisan create:formwidget --force DavideCasiraghi.Movies Actorbox 但是,当我试图将其加载到fields.yaml文件时,会出现此错误 未知控件类型:actorbox 这是/plugins/davidecasiraghi/movies/formwidgets/Actorbox.php的内容 <?php namespace DavideCasiraghi\

我通过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;
    }
}
<?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',
        ]
      ];
    }

}

据我所见,错误来自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
        ]);
    }

它只检查硬编码控制类型。。。所以看起来生成器插件不允许自定义的formwidgets。。。但是,在这个插件之外,这应该可以正常工作。

我试图用这个代码替换,但没有任何变化,我得到了相同的错误。我同意你的看法。我已经检查了100次是否有任何打字错误,但一切似乎都是正确的。是的,问题是它使用硬编码值,并且没有办法扩展它,你必须创建你自己的
CustomDesignTimeProvider
来添加你自己的值,而tempaltes=>builder插件无法识别你的
FormWidget actorbox
你需要明确地将你的规范告诉builder插件,这样它才能识别你的组件,请查看我的其他答案=>嗨Hardik,我必须在哪个文件和函数中指定它?我正在浏览你的代码,但我还不明白。它写在那里
将此代码添加到你的插件启动方法
plugin.php
文件,对于其他需要创建新的文件:)