如何将变量传递给zf2中的部分导航脚本



我在Module.php 的引导程序中创建了一个全局变量

public function setCashServiceToView($event) {
    $app = $event->getParam('application');
    $cashService = $app->getServiceManager()->get('Calculator/Service/CashServiceInterface');
    $viewModel = $event->getViewModel();
    $viewModel->setVariables(array(
        'cashService' => $cashService,
    ));
}
public function onBootstrap($e) {
    $app = $e->getParam('application');
    $app->getEventManager()->attach(ZendMvcMvcEvent::EVENT_RENDER, array($this, 'setCashServiceToView'), 100);
}

我可以在我的layout.phtml中使用它作为

$this->cashService;

但我需要这个变量在导航菜单的部分脚本中使用,我在layout.phtml:中调用它

      echo $this->navigation('navigation')
          ->menu()->setPartial('partial/menu')
          ->render();
  ?>

如何在我的partial/menu.html中使用它?也许有比在onBootstrap函数中声明它更好的方法吗?

谢谢你的回答。我决定制作一个扩展类\Zend\View\Helper\Navigation\Menu,为其提供cashService的属性。但是,我收到一个错误:"Zend\View\Helper\Navigation\PluginManager::get无法获取或创建Calculator\Service\CashServiceInterface的实例"。我需要此服务来显示导航菜单。看起来很奇怪,但那是真的。我使用从服务中获得的数据在其中显示一些图表。那么为什么我会出现错误呢?我添加到module.config.php

    'navigation_helpers' => array(
    'factories' => array(
        'mainMenu' => 'CalculatorViewHelperFactoryMainMenuFactory'
    ),

主菜单工厂:

namespace CalculatorViewHelperFactory;
use ZendServiceManagerFactoryInterface;
use ZendServiceManagerServiceLocatorInterface;
use CalculatorViewHelperModelMainMenu;
Class MainMenuFactory implements FactoryInterface {
    /**
    * Create service
    *
    * @param ServiceLocatorInterface $serviceLocator
    * @return mixed
    */
    public function createService(ServiceLocatorInterface $serviceLocator) {
        return new MainMenu(
            $serviceLocator->get('CalculatorServiceCashServiceInterface')
        );
    }

p.S:CashServiceInterface是CashServiceFactory 的别名

您可以删除事件侦听器,并使用自定义视图帮助程序来访问视图中的服务。

namespace CalculatorViewHelper;
use ZendViewHelperAbstractHelper;
class CashService extends AbstractHelper
{
    protected $cashService;
    public function __construct(CashServiceInterface $cashService)
    {
        $this->cashService = $cashService;
    }
    public function __invoke()
    {
        return $this->cashService;
    }
}

创建一个工厂。

namespace CalculatorViewHelper; 
class CashServiceFactory
{
    public function __invoke($viewPluginManager)
    {
        $serviceManager = $viewPluginManager->getServiceLocator();
        $cashService    = $serviceManager->get('Calculator\Service\CashServiceInterface');
        return new CashService($cashService);
    }
}

moudle.config.php中注册新的帮助程序。

'view_helpers' => [
    'factories' => [
        'CashService' => 'CalculatorViewHelperCashServiceFactory',
    ],
],

然后,您可以在所有视图脚本中使用该插件。

$cashService = $this->cashService();

相关内容

  • 没有找到相关文章

最新更新