Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
Zend framework ZF3中src/文件夹中的自定义目录_Zend Framework_Autoload_Zend Framework3 - Fatal编程技术网

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

Zend framework ZF3中src/文件夹中的自定义目录,zend-framework,autoload,zend-framework3,Zend Framework,Autoload,Zend Framework3,我有mvc zf3框架和表单。表单和字段集类位于src/Form目录中 上面的工作很好 我试图使表单目录更轻、更清晰,因此我创建了src/Fieldset目录,并将字段集类移到了那里。现在,表单类找不到字段集类 <?php namespace Application\Form; use Zend\Form\Element; use Zend\Form\Form; use Zend\Hydrator\ClassMethods as ClassMethodsHydrator; use Ze

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

上面的工作很好

我试图使表单目录更轻、更清晰,因此我创建了
src/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,
            ],
        ]);

第一个问题是自动加载程序正在文件
src/Form/AbcFieldset.php
目录中查找
Application\Form\AbcFieldset

您可以编写一个自定义自动加载器,该加载器将在
src/Fieldset
目录中查找,但最好遵循PSR标准,将Fieldset的名称空间改为
Application\Fieldset
(然后需要在示例中表单类的顶部添加
use Application\Fieldset\AbcFieldset;

第二个“问题”,也是错误消息的来源,是fieldset类没有被显式地注册到表单元素管理器中,因此您也可以添加到module.config.php中

'form_elements' => [
    'factories' => [
        \Application\Fieldset\AbcFieldset::class => \Zend\ServiceManager\Factory\InvokableFactory::class,
    ]
]
但是,除非您需要为字段集编写自定义工厂,否则这是不必要的——上面的名称空间更改应该可以解决这个问题