在Module.php中访问partial

时间:2015-01-10 14:18:44

标签: php zend-framework2 partials

我有两个模块。

  1. 应用
  2. 用户
  3. 布局在应用程序模块中设置,在布局中有我需要显示的模块特定导航元素,这是我想要做的。

    这是我在应用程序模块的布局/布局中调用的部分内容。

    //file: module/Application/view/layout/container/layout.phtml
    <?php echo $this->partial('toolbar'); ?>
    

    这是我的 toolbar.phtml

    //file: module/Application/view/layout/chunks/toolbar.phtml
    <div class="new-top-menu">
        <div class="navbar-header">
            <a class="navbar-brand sidebar-toggle-box" href="#">
                <div class="sidebar-left-trigger">
                    <span class="fa fa-align-right"></span>
                </div>
            </a>
        </div>
        <ul class="nav navbar-nav">
            <?php echo $this->placeholder('notification/top-menu'); ?>
        </ul>
        <ul class="nav navbar-nav navbar-right">
            <?php echo $this->placeholder('toolbar/search'); ?>
            <?php echo $this->placeholder('toolbar/right-position1')->set($this->position1); ?>
            <?php echo $this->placeholder('toolbar/right-position2')->set($this->position2); ?>
            <?php echo $this->placeholder('toolbar/right-position3')->set($this->position3); ?>
        </ul>
    </div>
    

    基本上我想从User模块中读取另一个名为toolbar/user-menu.phtml的部分,并将其设置为此占位符的内容$this->placeholder('toolbar/right-position3');

    我尝试在用户模块的Module.php中执行此操作。

    namespace User;
    
    public function onBootstrap(MvcEvent $e)
    {
        $viewModel = $e->getViewModel();
        $viewModel->setVariable('position1', 'test string');
    }
    

    这绝对没问题,问题是我想用file: module/User/view/toolbar/user-menu.phtml

    中的partial的内容替换内容'test string'

    有关如何在ZF2中完成此操作的任何指示表示赞赏。

    感谢。

    UPDATE1:

    我能够使用以下代码执行此操作,无论如何,我期待能否改进。

    在User / Module.php中,我更新了以下内容。

    use Zend\View\Renderer\PhpRenderer;
    use Zend\View\Resolver;
    
    public function onBootstrap(MvcEvent $event)
    {
        $application = $event->getApplication();
        $eventManager = $application->getEventManager();
        $serviceManager = $application->getServiceManager();
        //create a Template Stack
        $stack = new Resolver\TemplatePathStack(array('script_paths' => array(__DIR__ . '/view/user/toolbar')));
    
        //create a Resolver
        $resolver = new Resolver\AggregateResolver();
        $resolver->attach($stack);
    
        //create a Renderer
        $renderer = new PhpRenderer();
        $renderer->setResolver($resolver);
    
        $viewHelperManager = $serviceManager->get('ViewHelperManager');
        $urlViewHelper = $viewHelperManager->get('url');
    
        $partial = $renderer->partial('user-menu', array(
            'signOutUrl' => $urlViewHelper('user-account-sign-out')
        ));
        $viewModel = $event->getViewModel();
        $viewModel->setVariable('position1', $partial);
    }
    

    就是这样,我现在能够将HTML内容放在占位符中,我现在面临的唯一问题是访问user-menu.phtml文件中的视图助手,我目前正在Module.php中生成它将它传递给视图文件。

1 个答案:

答案 0 :(得分:1)

我认为你走在正确的轨道上,因为你开始关注本机视图助手,但是你不应该直接在Module中操作它们,你不应该试图改变你的工具栏查看脚本。

相反,创建自己的工具栏视图助手,通过其工厂(包括部分模板)注入依赖项,然后在布局视图脚本中只需echo $this->toolbar()

此外,您可以查看Spiffy Navigation,如果没有其他内容,只需查看视图助手的实现方式。 https://github.com/spiffyjr/spiffy-navigation