【问题标题】:Access partial in Module.php在 Module.php 中访问部分
【发布时间】:2015-01-15 18:17:00
【问题描述】:

我有两个模块。

  1. 应用
  2. 用户

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

这是我在应用程序模块的layout/layout中调用的部分。

//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>

基本上我想从用户模块中读取另一个名为 toolbar/user-menu.phtml 的部分并将其设置为这个占位符 $this-&gt;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的部分内容替换内容“测试字符串”

感谢任何关于如何在 ZF2 中完成此操作的指针。

谢谢。

更新1:

我能够使用以下代码做到这一点,无论如何,我期待着这是否可以改进。

在 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 中生成它和将其传递给视图文件。

【问题讨论】:

  • 为什么不创建一个类并将其定义为成员,以便可以重用它?
  • 它对我的场景有什么帮助?我在想占位符非常适合我想做的事情,我不确定如何使用独立类来实现。
  • 我解决了这个问题,但似乎太乱了,我把代码贴在这里。
  • 您可以定义静态成员。您设置成员值并在需要时使用它。

标签: php zend-framework2 partials


【解决方案1】:

我认为您走在正确的轨道上,因为您开始查看本机视图助手,但您不应该直接在 Module 中操作它们,也不应该尝试更改组合工具栏查看脚本。

相反,制作您自己的工具栏视图助手,通过其工厂(包括部分模板)注入依赖项,然后您可以在布局视图脚本中简单地echo $this-&gt;toolbar()

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

【讨论】:

  • 我不确定在我的场景中如何实现视图助手,谢谢您的回复:)
  • 这会有所帮助,因为这样您就可以在该类中包含所有汇编逻辑,并注入您的依赖项。现在您必须将逻辑放入视图脚本中,因为您将自己限制在 Partial 视图助手中。如果您创建自己的视图助手,则可以让模板成为模板,并让视图助手帮助:-)
  • 啊,很好的解释,谢谢你的指导,是时候与视图助手一起检查了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
相关资源
最近更新 更多