Как добавить пользовательский помощник вида в Zend Framework2? - PullRequest
0 голосов
/ 06 марта 2012

Я использовал скелетное приложение zf2 от github

1 Ответ

4 голосов
/ 07 марта 2012

вот выдержка из ссылки ZF2 , с которой следует начать:

14.4.2. Регистрация помощников Zend \ View \ Renderer \ PhpRenderer составляет брокер плагинов для управления помощниками, в частности, экземпляр Zend \ View \ HelperBroker, расширяющий базовый плагин брокера на порядок чтобы у нас были действительные помощники. HelperBroker по умолчанию использует Zend \ View \ HelperLoader в качестве своего вспомогательного локатора. HelperLoader есть загрузчик на основе карты, что означает, что вы просто отобразите имя помощника / плагина, по которому вы хотите сослаться на него имя класса помощника / плагина.

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

// $view is an instance of PhpRenderer
$broker = $view->getBroker();
$loader = $broker->getClassLoader();

// Register singly:
$loader->registerPlugin('lowercase', 'My\Helper\LowerCase');

// Register several:
$loader->registerPlugins(array(
    'lowercase' => 'My\Helper\LowerCase',
    'uppercase' => 'My\Helper\UpperCase',
));

В приложении MVC вы обычно просто передаете карту плагины к классу через вашу конфигурацию.

// From within a configuration file
return array(
    'di' => array('instance' => array(
        'Zend\View\HelperLoader' => array('parameters' => array(
            'map' => array(
                'lowercase' => 'My\Helper\LowerCase',
                'uppercase' => 'My\Helper\UpperCase',
            ),
        )),
    )),
);

Выше можно выполнить в каждом модуле, который должен зарегистрировать помощников с PhpRenderer; однако следует помнить, что другой модуль может зарегистрируйте помощников с тем же именем, чтобы порядок модулей мог влиять какой вспомогательный класс будет на самом деле зарегистрирован!

14.4.3. Написание пользовательских помощников Написание пользовательских помощников легко. Мы рекомендуем расширить Zend \ View \ Helper \ AbstractHelper, но на минимум, вам нужно только реализовать интерфейс Zend \ View \ Helper:

namespace Zend\View;

interface Helper
{
    /**
     * Set the View object
     *
     * @param  Renderer $view
     * @return Helper
     */
    public function setView(Renderer $view);

    /**
     * Get the View object
     *
     * @return Renderer
     */
    public function getView();
}

Если вы хотите, чтобы ваш помощник мог вызываться так, как если бы он был вызов метода PhpRenderer, вы также должны реализовать __invoke () в вашем помощнике.

Как отмечалось ранее, мы рекомендуем расширить Zend \ View \ Helper \ AbstractHelper, поскольку он реализует методы, определенные в Helper, давая вам преимущество в вашем развитии.

После того, как вы определили свой класс помощника, убедитесь, что вы можете автозагрузить и затем зарегистрируйте его у брокера плагинов.

Вот пример помощника, который мы называем «SpecialPurpose»

namespace My\View\Helper;

use Zend\View\Helper\AbstractHelper;

class SpecialPurpose extends AbstractHelper
{
    protected $count = 0;

    public function __invoke()
    {
        $this->count++;
        $output = sprintf("I have seen 'The Jerk' %d time(s).", $this->count);
        return htmlspecialchars($output, ENT_QUOTES, 'UTF-8');
    }
}

Тогда предположим, что когда мы регистрируем его в брокере плагинов, мы отображаем его в строку "specialpurpose".

В скрипте вида вы можете вызвать помощника SpecialPurpose как можно больше раз, как вам нравится; он будет создан один раз, а затем сохранится за жизнь этого экземпляра PhpRenderer.

// remember, in a view script, $this refers to the Zend_View instance.
echo $this->specialPurpose();
echo $this->specialPurpose();
echo $this->specialPurpose();

Вывод будет выглядеть примерно так:

Я видел «Рывок» 1 раз. Я видел «The Jerk» 2 раз. я видели "Рывок" 3 раз.

...