2013-05-14 11 views
6

Tôi muốn truy cập cấu hình ứng dụng từ chế độ xem. Làm thế nào tôi có thể đạt được điều đó trong ZF 2?Cách Truy cập Cấu hình Ứng dụng từ Xem trong Zend Framework 2 (zf2)?

+0

Vượt qua hành động điều khiển của bạn? Nếu không, hãy tạo một trình trợ giúp xem và chèn nó với cấu hình theo cách tương tự như ví dụ này http://stackoverflow.com/questions/16082529/calling-a-method-in-model-from-layout-in-zendframework- 2/16082884 # 16082884 sau đó viết các phương thức trợ giúp của bạn để truy cập những gì bạn cần. – Crisp

+0

Tôi làm cách nào để truy cập nó từ trình trợ giúp xem? –

+0

Hãy xem ví dụ tôi đã liên kết. Thay thế 'ModelService' bằng' config' và bạn có một trình trợ giúp của proxy tới mảng Config. Sau đó, bạn chỉ cần viết các phương thức cho trình trợ giúp của bạn truy cập vào mảng và gọi những phương thức đó trong khung nhìn của bạn. – Crisp

Trả lời

8

Thực ra bạn không cần phải truy cập vào cấu hình ứng dụng bên trong chế độ xem. Trong MVC, các khung nhìn chỉ chịu trách nhiệm hiển thị/kết xuất dữ liệu (đầu ra) và không nên chứa bất kỳ logic nghiệp vụ hoặc ứng dụng nào.

Nếu bạn thực sự muốn làm điều đó bạn chỉ có thể vượt qua để xem một cái gì đó trong điều khiển của bạn như thế này:

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

// ... 
?> 

Vì vậy, trong tập tin view.phtml của bạn;

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

Mặc dù bạn không nên có logic nghiệp vụ trong bộ điều khiển, nhưng cấu hình vẫn có thể ảnh hưởng đến logic hiển thị/hiển thị, ví dụ: một giá trị cấu hình cho biết giao diện cần hiển thị. Tôi vẫn đồng ý rằng nó phải là bộ điều khiển gửi các giá trị cấu hình cho khung nhìn - như là tốt hơn khi có thể - thông qua ViewModel, thay vì khung nhìn kéo cấu hình toàn cục ra khỏi ServiceManager chẳng hạn. –

7

Bạn nên tạo trình trợ giúp chế độ xem.

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 hoặc 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') 
      ); 
     }, 
    ) 
), 
); 

Sau đó, bạn có thể sử dụng các biến cấu hình trong bất kỳ xem.

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

Với ZF 2.2.1 (không chắc chắn đó là có thể với các phiên bản trước), bạn chỉ có thể thêm helper bạn withtut tiêm bất cứ điều gì

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

), ...

Và viết YourHelper triển khai giao diện Zend\ServiceManager\ServiceLocatorAwareInterface. Bạn sẽ phải thực hiện hai phương thức của giao diện (setter đơn giản và getters). Bây giờ bạn có thể truy cập vào định vị dịch vụ, và nhận được cấu hình:

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

Thông tin thêm tại http://robertbasic.com/blog/working-with-custom-view-helpers-in-zend-framework-2

Một helper để truy cập cấu hình ở đây https://gist.github.com/elvisciotti/6592837

0

Tôi tạo ra các mô-đun với bộ điều khiển plugin và xem helper để đọc cấu hình trong bộ điều khiển và chế độ xem. GitHub link __ Composer link

Sau khi cài đặt qua nhà soạn nhạc, bạn có thể sử dụng dễ dàng.

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;