2015-09-10 1 views
0

Je veux créer une aide de vue qui devrait revenir un HTML comme ça:ZF2 - Dynamic ViewHelper

<div class="panel panel-default"> 
    <div class="panel-body"> 
     :: Here is my content :: 
    </div> 
</div> 

Le plan est d'appeler comme suit, où le paramètre doit être une clé dans ma config, qui définit une classe d'aide vue de générer le contenu de mon groupe:

<?php 
    echo $this->panel('test'); 

    $config = [ 
     'view_helpers' => [ 
      'factories' => [ 
       'Panel' => 'Application\View\Helper\Factory\PanelFactory', 
       'Test' => 'Application\View\Helper\Factory\TestFactory' 
      ] 
     ], 
     'panels' => [ 
      'test' => 'Test' 
     ] 
    ]; 
?> 

donc je pourrais charger chaque contenu d'une aide de vue personnalisée dans un panneau, mais je dois injecter le gestionnaire d'aide de vue à mon avis du panneau assistant pour charger l'assistant de vue voulu de ma config. Est-ce que ce serait correct ou existe-t-il une meilleure solution?

+0

Vous pouvez injecter Config dans votre ViewHelper. C'est ce que tu veux dire? – tasmaniski

Répondre

2

Vous devriez peut-être jeter un coup d'œil à ZF2 partials. Si je ne me trompe pas, l'assistant de vue partielle semble faire ce que vous voulez.

Vous définissez un template (panel.phtml):

<div class="panel panel-default"> 
    <div class="panel-body"> 
     <?php echo $this->content ?> 
    </div> 
</div> 

Dans la vue dans laquelle vous voulez afficher votre panneau partiel:

$this->partial('panel.phtml', array(
    'content' => 'Whatever content you prefer (can also be another partial)' 
); 

Vous pouvez enregistrer vos partials comme vous enregistrer tout autre point de vue à l'intérieur de votre carte de modèle dans la vue d'aide config:

'view_manager' => array(
    'template_map' => array(
     'layout/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
     'header'    => __DIR__ . '/../view/layout/header.phtml', 
     'footer'    => __DIR__ . '/../view/layout/footer.phtml', 
     'error/404'    => __DIR__ . '/../view/error/404.phtml', 
     'error/index'   => __DIR__ . '/../view/error/index.phtml', 
     'panel'     => __DIR__ . '/../view/partial/panel.phtml', 
     'test'     => __DIR__ . '/../view/partial/test.phtml', 
    ) 
) 

Semble une solution facile à ce que vous voulez réaliser.
Ou avez-vous d'autres demandes?

+0

@DominikBarann ​​Ce n'est pas ce que vous voulez? Ou a-t-il résolu votre problème? – Wilt