2012-05-18 2 views
0

Je le code suivant dans mon contrôleur ZF2:définir une variable de vue dans le contrôleur constructer

<?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! 
} 

Comme vous pouvez le voir, je suis en utilisant le zend \ module de traducteur.
Je veux l'ajouter à la vue dans mon constructeur de contrôleur. je l'ai déjà essayé:

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

Mais cela ne fonctionne pas.

Aidez-nous s'il vous plaît.

+0

Par ailleurs, il ne devrait pas vraiment aucune raison d'utiliser \ Zend \ Registry - vous mettez des objets dans le registre sont essentiellement des variables globales, ce qui n » est pas t bonne forme. Au lieu d'utiliser le registre, pourquoi ne pas utiliser DI pour configurer votre traducteur et l'injecter là où il le faut. – superdweebie

+0

oui ... réponse postée –

Répondre

1

solution finale 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') 
      ) 
     ), 
2

ajouter une variable de classe privée private $viewModel. Ensuite, créez le ViewModel dans votre construtor, ajoutez les variables suivantes:

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

Retournez ensuite $this->viewModel de votre fonction d'action.

+0

merci pouvez-vous plz regarder @ ce numéro https://github.com/doctrine/DoctrineORMModule/issues/37 –

Questions connexes