Zend framework2 Zf2-我无法使用表单名称和别名将表单定义为共享表单
我正在制作ZendFramework2。我有一个表单,我想用作共享实例。但是Zend framework2 Zf2-我无法使用表单名称和别名将表单定义为共享表单,zend-framework2,zend-form,zend-form-element,Zend Framework2,Zend Form,Zend Form Element,我正在制作ZendFramework2。我有一个表单,我想用作共享实例。但是shared键只接受实际的类,而不接受分配给它的名称。共享一些代码片段以更好地了解我的问题: SampleForm.php namespace MyProject\Form; use Zend\Form\Form; class Sampleform extends Form { public function __construct() { parent::__construct('s
shared
键只接受实际的类,而不接受分配给它的名称。共享一些代码片段以更好地了解我的问题:
SampleForm.php
namespace MyProject\Form;
use Zend\Form\Form;
class Sampleform extends Form
{
public function __construct()
{
parent::__construct('sampelname');
}
/**
* Initialize the form elements
*/
public function init()
{
$this->add(
[
'type' => 'Text',
'name' => 'name',
'options' => [
'label' => 'Enter your name',
]
]
);
}
}
在Module.php
中定义SampleForm
:
namespace MyProject;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\ModuleManager\Feature\FormElementProviderInterface;
use MyProject\Form\SampleForm;
class Module implements ConfigProviderInterface, FormElementProviderInterface
{
/**
* {@inheritDoc}
*/
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
/**
* {@inheritdoc}
*/
public function getFormElementConfig()
{
return [
'invokables' => [
'MyProject\Form\SharedSampleForm' => SampleForm::class,
],
'aliases' => [
'sharedSampleForm' => 'MyProject\Form\SharedSampleForm'
],
'shared' => [
'MyProject\Form\SharedSampleForm' => true
]
];
}
}
它向我抛出了这样的错误:
Zend\ServiceManager\Exception\ServiceNotFoundException:Zend\Form\FormElementManager\FormElementManagerV2Polyfill::setShared:找不到名为“MyProject\Form\SharedSampleForm”的服务,无法将其标记为共享服务
但是,当我在Module.php
中定义我的getFormElementConfig
时,它会像预期的那样工作,如下所示:
public function getFormElementConfig()
{
return [
'invokables' => [
'MyProject\Form\SharedSampleForm' => SampleForm::class,
],
'aliases' => [
'sharedSampleForm' => 'MyProject\Form\SharedSampleForm'
],
'shared' => [
SampleForm::class => true
]
];
}
i、 e.在shared
键中,我提供了对实际表单类名的引用
public function getServiceConfig()
{
return [
'invokables' => [
SampleForm::class => SampleForm::class,
],
'aliases' => [
'sharedSampleForm' => SampleForm::class
],
'shared' => [
SampleForm::class => true
]
];
}
如果在getServiceConfig()
下定义了相同的定义,那么它将按预期工作,而不会引发任何此类错误
有人能建议/帮助我如何才能在共享的表单中使用服务名称,然后提供实际的类引用吗?getFormElementConfig()
用于定义表单元素。不用于将表单定义为服务。如果要将此表单定义为Service
,则应在getServiceConfig()
下定义它
另一个提示是,如果您已经创建了别名,只需使用它的类名定义服务
名称即可
public function getServiceConfig()
{
return [
'invokables' => [
SampleForm::class => SampleForm::class,
],
'aliases' => [
'sharedSampleForm' => SampleForm::class
],
'shared' => [
SampleForm::class => true
]
];
}
您可以使用别名调用表单,如下所示$this->getServiceLocator()->get('sharedSampleForm')代码>据我所知,在getServiceConfig()
中定义表单的惯例是不正确的,因为表单定义应该始终位于getFormElementConfig()下。谢谢你的答复,但我认为这不是一个正确的解决办法。关于第二个建议,我在定义表单时需要表单的特定名称,因此我无法将其名称定义为与类名相同的名称。请检查此项,您将看到getFormElementConfig()
用于定义自定义表单元素,而不是定义表单我同意您的看法getFormElementConfig()
用于定义自定义元素。但是如果您注意到表单类(Zend\Form\Form
),它本身就是通过Fieldset
在内部扩展元素,因此我们的表单类本身就是一个自定义元素。因此,它应该在getFormElementConfig()
中定义Zend\Form\Form
不是从Element
扩展而来的。元素的示例是Zend\Form\Element\Email',元素本身像这样添加到表单中
$Form->add(数组('type'=>'Email','name'=>'Email');`@DollyAswin很抱歉,但是你错了,表单元素管理器绝对可以用于表单,在某些情况下,这是正确使用表单的唯一合理方法。如果您想要一个文档示例,请参阅此处的“高级”部分->特别是,如果您阅读了有关自定义元素的部分,需要注意的两个“gotchas”之一是,第二个问题是您不能直接实例化表单类,而必须通过Zend\form\FormElementManager: