ZF3中src /文件夹中的自定义目录

时间:2018-02-25 20:54:20

标签: zend-framework autoload zend-framework3

我有mvc zf3骨架和表格。表单和字段集类位于src/Form目录中。

以上工作正常。

我尝试使Form目录更轻松,更清晰,因此我创建了src/Fieldset目录并在那里移动了fieldset类。现在,表单类找不到fieldset类。

<?php

namespace Application\Form;

use Zend\Form\Element;
use Zend\Form\Form;
use Zend\Hydrator\ClassMethods as ClassMethodsHydrator;
use Zend\InputFilter\InputFilter;

class MyForm extends Form
{
    public function __construct()
    {
        parent::__construct('my_form');

        $this->setAttribute('method', 'post');
        $this->setHydrator(new ClassMethodsHydrator(false));
        $this->setInputFilter(new InputFilter());

        $this->add([
            'type' => AbcFieldset::class,
            'name' => 'abcEntity',
            'options' => [
                'use_as_base_fieldset' => true,
            ],
        ]);

错误消息是

  

在插件管理器Zend \ Form \ FormElementManager \ FormElementManagerV3Polyfill中找不到名为“Application \ Form \ AbcFieldset”的插件

如何使表单在​​新位置查看字段集类?

1 个答案:

答案 0 :(得分:1)

第一个问题是PSR-4自动加载器正在文件Application\Form\AbcFieldset目录中查找src/Form/AbcFieldset.php类。

您可以编写一个可以查看src/Fieldset目录的自定义自动加载器,但最好坚持使用PSR标准,而是将字段集的命名空间更改为Application\Fieldset(然后您需要在示例中的表单类顶部添加use Application\Fieldset\AbcFieldset;

第二个'问题',以及错误消息的来源是fieldset类尚未使用表单元素管理器显式注册,因此您也可以添加到您的module.config.php

'form_elements' => [
    'factories' => [
        \Application\Fieldset\AbcFieldset::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
    ]
]

但除非您需要为字段集编写自定义工厂,否则这不是必需的 - 上面的命名空间更改应解决问题。