2013-05-14 7 views
6

Ich wollte auf die Anwendungskonfiguration aus einer Ansicht zugreifen. Wie kann ich das in ZF 2 erreichen?Zugriff auf die Anwendungskonfiguration von View in Zend Framework 2 (zf2)?

+0

Übergeben Sie es von Ihrer Controller-Aktion? Wenn nicht, erstellen Sie einen View-Helper und injizieren Sie ihn mit der Konfiguration auf die gleiche Weise wie in diesem Beispiel http://stackoverflow.com/questions/16082529/calling-a-method-in-model-from-layout-in-zendframework- 2/16082884 # 16082884 Schreiben Sie dann Ihre Hilfsmethoden, um auf Ihre Bedürfnisse zuzugreifen. – Crisp

+0

Wie kann ich von einem View-Helfer darauf zugreifen? –

+0

Schauen Sie sich das Beispiel an, das ich verlinkt habe. Ersetzen Sie 'ModelService' durch' config' und Sie haben einen Helfer, den Proxy zu dem Config-Array. Sie müssen dann nur Methoden für Ihren Helfer schreiben, die auf das Array zugreifen, und diese in Ihrer Ansicht aufrufen. – Crisp

Antwort

8

Eigentlich sollten Sie in einer Ansicht nicht auf die Anwendungskonfiguration zugreifen müssen. In MVC sind Ansichten nur für das Anzeigen/Rendern von Daten (Ausgabe) verantwortlich und sollten keine Geschäfts- oder Anwendungslogik enthalten.

Wenn Sie wirklich wollen, zu tun, dass Sie einfach in Ihrem Controller so etwas wie dies passieren können zu lesen:

<?php 
namespace YourModule\Controller; 

use Zend\View\Model\ViewModel; 

// ... 

public function anyAction() 
{ 
    $config = $this->getServiceLocator()->get('config'); 
    $viewModel = new ViewModel(); 
    $viewModel->setVariables(array('config' => $config)); 
    return $viewModel; 
} 

// ... 
?> 

Also in Ihrer view.phtml Datei;

<div class="foo"> 
... 
<?php echo $this->config; ?> 
... 
</div> 
+2

Während Sie in Ihrem Controller keine Geschäftslogik haben sollten, kann die Konfiguration die Rendering/Display-Logik, z. Ein Konfigurationswert teilt der Anzeige mit, welches Thema sie darstellen soll. Ich bin immer noch der Meinung, dass es der Controller sein sollte, der über das ViewModel Konfigurationswerte an die Ansicht sendet - so fein wie möglich - und nicht die Ansicht, die die globale Konfiguration zum Beispiel aus dem ServiceManager zieht. –

7

Sie sollten einen View-Helfer erstellen.

Config.php

<?php 
namespace Application\View\Helper; 

class Config extends \Zend\View\Helper\AbstractHelper 
{ 
    public function __construct($config) 
    { 
     $this->key = $config; 
    } 

    public function __invoke() 
    { 
     return $this->config; 
    } 

} 

module.php oder theme.config.php

return array(
    'helpers' => array(
    'factories' => array(
     'config' => function ($sm) { 
      return new \Application\View\Helper\Config(
        $sm->getServiceLocator()->get('Application\Config')->get('config') 
      ); 
     }, 
    ) 
), 
); 

Dann können Sie Konfigurationsvariablen in allen Ansichten.

echo $this->config()->Section->key; 
7

Mit ZF 2.2.1 (nicht sicher, dass mit den vorherigen Versionen möglich ist), können Sie einfach Ihre Helfer hinzufügen withtut etwas Injektion

# module.config.php 
... 
'view_helpers' => array(
    'invokables' => array(
    'yourHelper' => 'Application\View\Helper\YourHelper', 
), 

), ...

Und Schreiben YourHelper Implementieren der Schnittstelle Zend\ServiceManager\ServiceLocatorAwareInterface. Sie müssen die zwei Methoden der Schnittstelle implementieren (einfacher Setter und Getter). Sie können nun den Service Locator zugreifen und erhalten die Konfiguration:

namespace Application\View\Helper; 

class YourHelper implements Zend\ServiceManager\ServiceLocatorAwareInterface 
{ 

    public function __invoke() 
    { 
    $config = $this->getServiceLocator()->getServiceLocator()->get('Config'); 

    // $config is the object you need 

    return $config; 
    } 

    public function getServiceLocator() 
    { 
    return $this->serviceLocator; 
    } 

    public function setServiceLocator(\Zend\ServiceManager\ServiceLocatorInterface $serviceLocator) 
    { 
    $this->serviceLocator = $serviceLocator; 
    return $this; 
    } 
} 

Mehr Infos unter http://robertbasic.com/blog/working-with-custom-view-helpers-in-zend-framework-2

Ein Helfer die Config hier https://gist.github.com/elvisciotti/6592837

0

ich das Modul erstellt für den Zugriff mit Controller-Plugin und View Helfer zum Lesen einer Konfiguration in Controllern und Ansichten. GitHub link __ Composer link

Nach der Installation über Composer können Sie es einfach verwenden.

echo $this->configHelp('key_from_config'); //read specific key from config 

$config = $this->configHelp(); //return config object Zend\Config\Config 
echo $config->key_from_config; 
Verwandte Themen