Zend framework ZF3中src/文件夹中的自定义目录
我有mvc zf3框架和表单。表单和字段集类位于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
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,
]
]
但是,除非您需要为字段集编写自定义工厂,否则这是不必要的——上面的名称空间更改应该可以解决这个问题