2012-07-09 6 views
0

Je me demande simplement quel serait le meilleur moyen d'utiliser Zend_Navigation dans Zend Framework2. En ce moment j'essaye d'ajouter une configuration pour un en-tête et un menu de pied de page. Les deux menus doivent être remplis automatiquement. Bien que, j'ai rencontré beaucoup de problèmes:Zend Framework 2: Zend_Navigation

a) Le meilleur endroit pour le menu par défaut devrait être l'application, espérons-module

b) J'ajouté ce qui suit à la racine de module.config.php :

'view_helpers' => array(
    'helper_map' => array(
      'navigation' => 'Application\View\Helper\Navigation' 
    ), 
), 

Mon Navigation.php est situé dans ./module/Application/src/Application/View/Helper/Navigation.php

et contient:

class Navigation extends AbstractContainer { 
    public function __construct($menu = null) { 
     var_dump($menu); 
    } 
} 

Je sais que la classe peut se tromper. Mais au moment où je n'ai pas eu ZF2 pour charger la classe. Qu'est-ce qui ne va pas ?

Répondre

1

En supposant que vous utilisez beta5 - vous configurez simplement votre viewhelper mal. Voir this post sur la façon de le faire correctement.

Sur la façon d'utiliser la navigation: Je crée un service dans le ServiceManager appelé navigation et mis ma navigation dans une nouvelle clé config.

return array(
    'navigation' => array(
     // your navigation config goes here 
    ), 
    'servicemanager' => array(
     'factories' => array(
      'navigation' => function($sm) { 
       $config = $sm->get('Configuration'); 
       $navigation = new \Zend\Navigation\Navigation($config->get('navigation')); 
       return $navigation; 
      } 
     ), 
    ), 
    'view_helpers' => array(
     'factories' => array(
      'navigation' => function($sm) { 
       return new \My\View\Helper\Navigation($sm->get('navigation')); 
      } 
     ), 
    ), 
); 

(Je ne sais pas sur les noms de classe de navigation Haven » t avait un regard sur eux)

Cela fait trois choses:.

  • Fournir un service appelé navigation pointant vers l'instance réelle si la navigation zend
  • votre aide de Fournir vue et la main une référence à l'instance de votre navigation
  • Créer un nouveau plus haut niveau clé navigation contenant la configuration de navigation. D'autres modules peuvent ajouter une navigation personnalisée ici sans rien changer dans votre configuration.

Par exemple, dans vos contrôleurs vous codez récupérer l'instance de navigation en appelant

$this->getServiceLocator()->get('navigation'); 

alors que dans votre aide de vue a accès à la navigation par son constructeur:

Navigation extends // ... 
{ 
    public function __construct($navigation) 
    { 
     // do anything you want 
    } 
} 

D'autres modules peuvent ajouter des entrées à votre navigation en écrivant dans la même clé:

return array(
    'navigation' => array(
     // further navigation entries 
    ), 
); 

Lorsque vous mettez la logique initiale (par ex. mettre en place les services/voir les aides) est à vous. Je préfère écrire un propre module pour celui-ci qui peut être désactivé avec une seule ligne de code (ce qui rend la navigation plus présente). Mais le module par défaut est probablement aussi un bon endroit. Finalement, vous pouvez créer vos propres classes d'usine pour l'assistant de navigation et de visualisation au lieu de mélanger la configuration avec votre code.

Clause de non-responsabilité: Le code est juste un brouillon - non testé.

+0

Merci de m'avoir donné la bonne direction! ;) – gmuehl