установить некоторую переменную представления в конструкторе контроллера

У меня есть следующий код в моем контроллере zf2:

<?php
namespace Accounting\Controller;

use Zend\Mvc\Controller\ActionController,
Zend\View\Model\ViewModel,
Accounting\Model,
Zend\Paginator,
Accounting\Scripts\CMSTranslator;

class AdminController extends ActionController {

protected $translator;

public function setTranslator(CMSTranslator $translator) {
    $this->translator = $translator;
    return $this;
}

public function __construct(\Doctrine\ORM\EntityManager $em,CMSTranslator $translator) {
    $this->em = $em;

    //$this->translator = new \Zend\Translator\Translator('ArrayAdapter', __DIR__ . '/../../../lang/lang-fa.php', 'fa');
    $this->translator = $translator;

    \Zend\Registry::set('tr', $this->translator);
    // now you can use the EntityManager!
}

Как видите, я использую модуль zend\translator.
Я хочу добавить его в представление конструктора моего контроллера. Я уже пробовал:

return ViewModel(array('tr'=>$translator));

Но это не работает.

Пожалуйста помоги.


person Sina Miandashti    schedule 18.05.2012    source источник
comment
Между прочим, не должно быть никакой причины использовать \Zend\Registry — объекты, которые вы помещаете в реестр, по сути являются глобальными переменными, что не является хорошим тоном. Вместо использования реестра, почему бы не использовать DI для настройки вашего переводчика и внедрить его туда, где это необходимо.   -  person superdweebie    schedule 19.05.2012


Ответы (2)


добавить переменную закрытого класса private $viewModel. Затем создайте ViewModel в своем конструкторе, добавьте любые переменные:

$this->viewModel = new ViewModel();
$this->viewModel->tr = $translator;

Затем верните $this->viewModel из вашей функции действия.

person superdweebie    schedule 19.05.2012
comment
спасибо, не могли бы вы посмотреть эту проблему github.com/doctrine/DoctrineORMModule/issues/37 - person Sina Miandashti; 19.05.2012

Окончательное решение module.config.php

'Accounting\Controller\AccountingController' => array(
            'parameters' => array(
                'em' => 'doctrine_em',
                'translator' => 'Accounting\Scripts\CMSTranslator',
            ),
        ),
        'Zend\View\Helper\Translator' => array(
            'parameters' => array(
                'translator' => 'Accounting\Scripts\CMSTranslator'
            )
        ),
        'Accounting\Scripts\CMSTranslator' => array(
            'parameters' => array(
                'options' => array('adapter' => 'ArrayAdapter', 'content' => __DIR__ . '/../lang/lang-fa.php', 'local' => 'fa')
            )
        ),
        'translateAdapter' => array(
            'parameters' => array(
                'options' => array('adapter' => 'ArrayAdapter', 'content' => __DIR__ . '/../lang/lang-fa.php', 'local' => 'fa')
            )
        ),
person Sina Miandashti    schedule 19.05.2012