Zf2 - 我无法使用其名称和别名

时间:2017-06-28 15:50:43

标签: zend-framework2 zend-form zend-form-element

我正在研究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表格中使用服务名称然后提供实际的课程参考?

1 个答案:

答案 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');

来调用表单