十月 CMS:无法创建表单小部件

October CMS : Not able to create a Form Widget

我是 October CMS 的新手,正在学习创建表单小部件。但我收到以下错误:

The partial '_field_actorbox.htm' is not found.
/opt/lampp/htdocs/octobermovies/modules/system/traits/ViewMaker.php line 65

我的小部件文件夹名称是 'formwidgets' 我在 partials 文件夹中的 partials 文件名为“_widget.htm” 我的表单小部件的内容 > Actorbox.php

namespace Watchlearn\Movies\FormWidgets;

use Backend\Classes\FormWidgetBase;
use Config;

class ActorBox extends FormWidgetBase
{
    public function widgetDetails()
    {
        return [
            'name' => 'Actorbox',
            'description' => 'Field for adding actors'
        ];
    }

    public function render(){
        return $this->makePartial('widget');
    }

    public function loadAssets()
    {
        $this->addCss('css/select2.css');
        $this->addJs('js/select2.js');
    }
}

我在 plugin.php

中注册小部件的代码
public function registerFormWidgets()
    {
        return [
            'Watchlearn\Movies\FormWidgets\ActorBox' => [
                'label' => 'ActorBox Field',
                'code' => 'actorbox'
            ]
        ];
    }

我也尝试查找并查看文档,但找不到任何解决方案。

您是否使用 artisan 创建了表单小部件文件?

php artisan create:formwidget watchlearn\Movies Tagbox(进入插件文件夹)

也许它会帮助您设置正确的权限并帮助您解决问题:) (它对我有用,我遇到了完全相同的问题)

我认为错误在于:

My widget folder name is 'formwidgets' My partials file name inside partials folder is '_widget.htm' Content of my formwidgets > Actorbox.php

但是你有

class ActorBox extends FormWidgetBase

而且您似乎在整个代码的其余部分都使用了那个 class 带有大写字母 B 的名称。

OctoberCMS 正在查找文件 formWidgets/ActorBox.php,与 registerFormWidgets 中给出的 classname 相匹配 函数。 FormWidget(以及 Component 和 Model 等)。php 文件名应始终与包含的 Widget(或任何大小写)class 名称 完全匹配 .

所以在这种情况下,表单小部件根本没有注册,因为没有找到具有匹配名称的文件。您正在使用的表单定义 .yaml 文件中的 type: actorbox 字段默认情况下会导致 October 查找要呈现的 _field_actorbox.htm 部分。

所以只需将您的 Actorbox.php 重命名为 ActorBox.php,我希望您的问题应该得到解决。

尝试检查文件的路径actorbox.php。我也遇到了同样的问题,我将 actorbox.php 移动到正确的路径然后一切正常。

Actorbox.php 应该在 formwidgets 路径中。如果正确创建目录结构将像

|-- formwidgets
|  
|-- ActorBox.php
|   `-- actorbox
|       |-- assets
|       |   |-- css
|       |   |   |-- actorbox.css
|       |   |   `-- select2.min.css
|       |   `-- js
|       |       |-- actorbox.js
|       |       `-- select2.min.js
|       `-- partials
|           `-- _actorbox.htm