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)?
Antwort
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>
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. –
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;
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
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;
Ü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
Wie kann ich von einem View-Helfer darauf zugreifen? –
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