Просмотр расширения вспомогательного плагина в ZF2

Я хочу расширить, например, Zend\View\Helper\HeadMeta своим собственным классом, и я создаю для него фабрику и вызываю ее

public function getViewHelperConfig()
{
    return array(
        'factories' => array(
            'MyHeadMeta' => __NAMESPACE__ . '\View\Helper\Service\MyHeadMetaService',
        ),
    );
}

от Module.php, но у меня есть

$this->view

является null в классе MyHeadMeta, если я назову его

$this->MyHeadMeta()->setCharset('utf-8');

в моем файле просмотра.

Как мне правильно создать экземпляр моего помощника представления?

ОБНОВИТЬ

Мой класс выглядит примерно так:

MyHeadMeta.php

use Zend\View\Helper\HeadMeta;

class MyHeadMeta extends HeadMeta
{
    //
}

ОБНОВЛЕНИЕ 2

MyHeadMetaService.php

class MyHeadMetaService implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        $viewHelper = new MyHeadMeta();
        // some settings to set...
        return $viewHelper;
    }
}

person dima    schedule 16.12.2015    source источник
comment
Как выглядит ваш MyHeadMetaService?   -  person Wilt    schedule 16.12.2015
comment
Привет! Я отредактировал свой вопрос, в общем, это просто расширение родного HeadMeta.   -  person dima    schedule 17.12.2015


Ответы (1)


Если вы только расширяете существующий класс HeadMeta, вы должны зарегистрировать его как вызываемый как это делается с исходным HeadMeta помощником представления в файле HelperPluginManager.

Поэтому измените свою конфигурацию следующим образом:

return array(
    'invokables' => array(
        'MyHeadMeta' => 'View\Helper\Service\MyHeadMetaService'
    )
);

Кстати, я не думаю, что нужно использовать полный путь с __NAMESPACE__. Просто убедитесь, что имя указывает на правильный путь к файлу и папке вашего класса в текущем модуле, и объявите константу namespace в классе.

person Wilt    schedule 17.12.2015
comment
Спасибо за ваш ответ! Но я думаю, мне нужно сделать это с фабрикой, потому что у меня есть настройки для установки глобального объекта. Есть ли способ сделать это? - person dima; 17.12.2015
comment
@Dima Хорошо, но я попросил тебя показать MyHeadMetaService, а ты показываешь invokable, а не фабрику... - person Wilt; 18.12.2015
comment
Привет! Я снова отредактировал свой вопрос, чтобы показать вам фабрику. Это довольно просто и обычно, ничего особенного. Моя фабрика не работает, но в HelperPluginManager.php фабрики есть. - person dima; 18.12.2015
comment
@dima Что именно сейчас не работает? На завод никогда не звонили? - person Wilt; 18.12.2015