我正在研究ZendFramework 2.我有一个表单,我希望将其用作共享实例。但是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',
]
]
);
}
}
在SampleForm
中定义Module.php
:
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: A service by the name "MyProject\Form\SharedSampleForm" was not found and could not be marked as shared
但是当我在getFormElementConfig
中定义Module.php
时,它按预期工作,如下所示:
public function getFormElementConfig()
{
return [
'invokables' => [
'MyProject\Form\SharedSampleForm' => SampleForm::class,
],
'aliases' => [
'sharedSampleForm' => 'MyProject\Form\SharedSampleForm'
],
'shared' => [
SampleForm::class => true
]
];
}
即。在shared
键中,我提供了对实际Form类名的引用。
如果在getServiceConfig()
下定义了相同的定义,那么它会按预期工作,而不会抛出任何此类错误。
有人可以建议/帮助我如何在shared
表格中使用服务名称然后提供实际的课程参考?
答案 0 :(得分:-1)
getFormElementConfig()
用于定义表单元素。不用于将表单定义为服务。如果您想将此表单定义为Service
,则应在getServiceConfig()
下定义。
另一个提示,如果您创建了别名,只需使用它的类名定义Service
名称。
public function getServiceConfig()
{
return [
'invokables' => [
SampleForm::class => SampleForm::class,
],
'aliases' => [
'sharedSampleForm' => SampleForm::class
],
'shared' => [
SampleForm::class => true
]
];
}
您可以使用别名如$this->getServiceLocator()->get('sharedSampleForm');