2015-11-10 73 views
0

我想從控制器傳遞一些值到局部,基本上,在Application \ Module.php中使用佔位符來設置視圖局部,這裏是它的代碼。傳遞一個值從控制器到局部在ZF2

<?php 

namespace Application; 

use Zend\Mvc\ModuleRouteListener; 
use Zend\Mvc\MvcEvent; 
use Zend\View\Renderer\PhpRenderer; 
use Zend\View\Resolver; 
use Zend\ServiceManager\ServiceManager; 

class Module 
{ 
    public function onBootstrap(MvcEvent $e) 
    { 
     $eventManager = $e->getApplication()->getEventManager(); 
     $moduleRouteListener = new ModuleRouteListener(); 
     $eventManager->attach(\Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'initBreadcrumbAndActionButtonWidget')); 
     $moduleRouteListener->attach($eventManager); 
     $serviceManager = $e->getApplication()->getServiceManager(); 
    } 

    public function initBreadcrumbAndActionButtonWidget(\Zend\Mvc\MvcEvent $e) 
    { 
     $serviceManager = $e->getApplication()->getServiceManager(); 
     $config = $serviceManager->get('config'); 
     $viewHelperManager = $this->getViewHelperManager($e->getApplication()->getServiceManager()); 
     $partialHelper = $viewHelperManager->get('partial'); 
     $partial = $partialHelper('widgets/breadcrumb', array(
      'config' => $config, 
      'actionButtons' => $config['action-buttons'] 
     )); 
     $placeHolder = $viewHelperManager->get('placeholder'); 
     $placeHolder('widgets/breadcrumb')->set($partial); 
    } 

    public function getViewHelperManager($serviceManager) 
    { 
     $stack = new Resolver\TemplatePathStack(array('script_paths' => array(__DIR__ . '/view/'))); 
     $resolver = new Resolver\AggregateResolver(); 
     $resolver->attach($stack); 
     $renderer = new PhpRenderer(); 
     $renderer->setResolver($resolver); 
     $viewHelperManager = $serviceManager->get('ViewHelperManager'); 
     return $viewHelperManager; 
    } 

    public function getConfig() 
    { 
     return array_merge_recursive(
      include __DIR__ . '/config/module.config.php', 
     ); 
    } 

    public function getAutoloaderConfig() 
    { 
     return array(
      'Zend\Loader\StandardAutoloader' => array(
       'namespaces' => array(
        __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, 
       ), 
      ), 
     ); 
    } 
} 

這是所有工作好到這裏,但是現在我想從控制器的值傳遞給部分widgets/breadcrumb,經過多次嘗試我想實現一個視圖助手可能是一個解決方案,我執行下面的視圖助手。

<?php 
namespace Application\View\Helper; 

use Zend\View\Helper\AbstractHelper; 

class Variable extends AbstractHelper 
{ 
    protected $data; 

    public function __invoke() 
    { 
     return $this; 
    } 

    public function set($identifier, $data) 
    { 
     $this->data[$identifier] = $data; 
     return $this; 
    } 

    public function get($identifier) 
    { 
     return $this->data[$identifier]; 
    } 
} 

在控制器中,我將值賦給ViewHelper像這樣。

$viewHelperManager = $this->getServiceLocator()->get('ViewHelperManager'); 
$variable = $viewHelperManager->get('variable'); 
$variable->set('stack', 'overflow'); 

而在部分中,要訪問我使用get方法的值。現在

$this->variable()->get('stack'); 

我的問題是,get()呈現先因此,在控制器設置的值沒有任何影響。

我的問題是我怎樣才能使set()得到先渲染,所以我可以有部分的價值,或者如果有任何更好的方法傳遞值的部分請建議。

謝謝。

回答

0

Baaah,我叫錯了動作視圖助手,它的工作,當我提出在我想傳遞價值的行動$variable->set('stack', 'overflow');

不知道是否可以有一個更好的解決方案,但這樣做的工作對我來說,傳遞的價值後,我發現在ZF2沒有辦法滿足我的要求。

相關問題