我有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”的插件
如何使表单在新位置查看字段集类?
答案 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,
]
]
但除非您需要为字段集编写自定义工厂,否则这不是必需的 - 上面的命名空间更改应解决问题。