zend-framework2 - ZF2 局部 View 助手

标签 zend-framework2

编辑原始帖子以使其更加清晰。现在有一个新的麻烦领域,我认为是纯语法。

我是 OOP 和 Zend Framework 2 的新手。尝试了解部分的使用。我还扩展了由其他人首先启动的应用程序。因此,实体/网关/ Controller / View 的命名约定确保对于指定的操作,返回正确的模板。

我正在尝试使用“partial('/nav/index.phtml');”作为在索引页的标题中插入一个片段的一种方式。但我想在其他页面上使用不同的部分。

按照 Marshall 的建议,在 TemplateController 中,我向 viewModel 添加一个变量 (nav_template),指定用于导航的部分:

    <?php

    namespace Application\Controller;

    use Zend\Mvc\Controller\AbstractActionController;
    use Zend\View\Model\ViewModel;

    class TplController extends AbstractActionController
    {
        public function topicAviewAction()
        {
            $viewModel = new ViewModel();
            $viewModel->setTerminal(true);
        $viewModel->setVariable('nav_template', 'nav/topica.phtml');
            return $viewModel;
        }

        public function topicBviewAction()
        {
            $viewModel = new ViewModel();
            $viewModel->setTerminal(true);
        $viewModel->setVariable('nav_template', 'nav/topicb.phtml');
            return $viewModel;
        }
    }

我使用以下命令来验证我的变量是否包含在对象中

    echo $viewModel->nav_template;

但是,当我使用以下命令将部分包含在layout.phtml中时:

    <?php echo $this->partial(isset($nav_template) ? $nav_template : 'nav/index'); ?>

它显然没有使用/查找 $nav_template 的值。我哪里出错了?

最佳答案

您可以在 Module 类中使用 onBootstrap 事件。确保在路由事件中处理它,否则此时 onBootstrap 中还没有路由匹配。示例:

public function onBootstrap(MvcEvent $e)
    {
        $e->getApplication()->getEventManager()->attach(
                \Zend\Mvc\MvcEvent::EVENT_ROUTE,
                function($e) {
                    $viewModel = $e->getViewModel();
                    $nav = new \Zend\View\Model\ViewModel();
                    $routeMatch = $e->getRouteMatch();
                    switch ($routeMatch->getMatchedRouteName())
                    {
                        case 'home':
                            $template = 'your/template';
                            break;

                        default:
                            break;
                    }
                    $nav->setTemplate($template);
                    $viewModel->addChild($nav, 'nav');
                },
                -1000
        );
        ...

在你的布局中你可以使用:echo $nav;

请注意,您还必须在 module.config.php 的 'view_manager' => 'template_map' 键中定义您使用的模板。

关于zend-framework2 - ZF2 局部 View 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17354481/

相关文章:

zend-framework2 - COUNT 和 GROUP BY 使用 Zend Framework 2 和 tableGateway

php - ZF2 如何获取最后插入的 id 值?

php - Zend 框架 - 错误不会登录

php - 如何将 Zend Framework 2 和 Mongodb 与 shanty mongo 库集成,

zend-framework2 - 在模型类中使用 ServiceManager 的最佳方式?

php - 如何检索ZF2中插入行的id?

oop - phpunit:模拟对象不愚弄 php

zend-framework - ZF 2.4 文件验证器需要 False 不起作用

mysql - Zf2 表网关连接查询仅从第二个表中获取最新行(按 id)

php - 如何在 zend 框架 2 中返回一个对象数组?