2013-05-14 10 views
6

Chciałem uzyskać dostęp do konfiguracji aplikacji z widoku. Jak mogę to osiągnąć w ZF 2?Jak uzyskać dostęp do konfiguracji aplikacji z widoku w Zend Framework 2 (zf2)?

+0

Przesłać go z działania kontrolera? Jeśli nie, utwórz pomocnika widoku i wstrzyknij mu konfigurację w taki sam sposób, jak ten przykład http://stackoverflow.com/questions/16082529/calling-a-method-in-model-from-layout-in-zendframework- 2/16082884 # 16082884 następnie wpisz swoje metody pomocnicze, aby uzyskać dostęp do tego, czego potrzebujesz. – Crisp

+0

Jak uzyskać do niego dostęp z pomocnika widoku? –

+0

Spójrz na przykład, który łączyłem. Zamień 'ModelService' na' config', a otrzymasz pomocnika, który jest proxy dla tablicy Config. Następnie wystarczy napisać metody dla pomocnika, który uzyskuje dostęp do tablicy i wywołać te w widoku. – Crisp

Odpowiedz

8

W rzeczywistości nie ma potrzeby uzyskiwania dostępu do konfiguracji aplikacji w widoku. W MVC widoki odpowiedzialne za wyświetlanie/renderowanie danych (dane wyjściowe) i nie powinny zawierać logiki biznesowej ani aplikacji.

Jeśli naprawdę chcesz to zrobić, że można po prostu przejść do wyświetlenia w Twojej kontrolera coś takiego:

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

// ... 
?> 

to w pliku view.phtml;

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

Chociaż nie powinieneś mieć logiki biznesowej w swoim kontrolerze, konfiguracja może nadal wpływać na logikę renderowania/wyświetlania, np. wartość konfiguracyjna określa widok, jaki motyw powinien zostać wyświetlony. Nadal się zgadzam, że powinien to być kontroler, który przesyła wartości konfiguracyjne do widoku - tak drobnoziarnistego, jak to tylko możliwe - za pośrednictwem ViewModel, a nie do widoku pobierającego globalną konfigurację z ServiceManager na przykład. –

7

Powinieneś stworzyć pomocnika widoku.

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 lub 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') 
      ); 
     }, 
    ) 
), 
); 

Następnie można używać zmiennych konfiguracyjnych w dowolnym widoku.

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

Z ZF 2.2.1 (nie jestem pewien, że to możliwe w poprzednich wersjach), można po prostu dodać pomocnika withtut wstrzykiwanie nic

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

), ...

I napisz YourHelper implementujący interfejs Zend\ServiceManager\ServiceLocatorAwareInterface. Będziesz musiał zaimplementować dwie metody interfejsu (prosty setter i gettery). Możesz teraz uzyskać dostęp do lokalizatora usług i uzyskać konfigurację:

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; 
    } 
} 

Więcej informacji na http://robertbasic.com/blog/working-with-custom-view-helpers-in-zend-framework-2

pomocnika dostęp do config tutaj https://gist.github.com/elvisciotti/6592837

0

stworzyłem moduł ze sterownikiem wtyczki i widok pomocnika do odczytu konfiguracji w kontrolerach i widokach. GitHub link __ Composer link

Po instalacji za pomocą kompozytora można go z łatwością używać.

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; 
Powiązane problemy