2015-11-10 23 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没有办法满足我的要求。

相关问题