ZF2在视图中查看

时间:2012-12-18 00:16:31

标签: zend-framework2

我想创建一个具有以下行为的界面:

HTML output for /a/.
<ul>
<li>html output for /a/1/</li>
<li>html output for /a/2/</li>
<li>html output for /a/3/</li>
</ul>

所以猜测/ a /的视图会运行一个函数来获取每个/ a / 1 /,/ a / 2 /等的html。

显然我的路由器将包含/ a /和/ a / [:number]的两个单独的控制器函数,而我的/ a / [:number]的控制器函数将返回带有setTerminal(true)的ViewModel。

我可以在页面加载后用ajax调用每个URL,我这样做的原因是我希望ajax稍后单独更新那些html片段,但在第一次调用时它应该是更快地在调用/ a /.

时呈现HTML的那些部分

在我看来,我需要一个函数来返回/ a / [:number] /的HTML,所以我的问题是,我该怎么做?我可以使用什么功能?

由于

1 个答案:

答案 0 :(得分:0)

您将编写一个视图助手(扩展Zend \ View \ Helper \ AbstractHelper)。视图助手需要以下信息:

  • 要渲染的路线
  • 允许的渲染参数(即1-10)

在您的视图中,您将调用view-helper,如:

$this->linkGenerator('a', array(1, 10)); //render all from /a/1 to /a/10

您的视图帮助器看起来像这样:

namespace Mynamespace\View\Helper;

use Zend\View\Helper\AbstractHelper;

class LinkGenerator extends AbstractHelper
{
    public function __invoke($routeName, array $range)
    {
        return $this->getView()->render('mynamespace/view/helper/linkgenerator.phtml', array(
            'route' => $routeName,
            'range' => $range
        ));
    }
}

最后你的linkgenerator.phtml看起来像这样:

<ul>
    <?php foreach($this->range as $value) : ?>
    <li>
         <a href="<?php echo $this->url($this->route, array('id', $value));?>">
             ####RouteLabel!?
         </a>
    </li>
    <?php endforeach; ?>
</ul>

现在路线标签将是更棘手的事情之一。由于ID会有不同的标签(假设),您可能需要从viewhelper调用导航配置或数据库并相应地获取标签。

tableGateway / Mapper / EntityRepository的注入将在__construct()函数内完成。

您在注册视图助手时通过您指定的工厂注入所需的东西:

    public function getViewHelperConfig()
    {
        return array(
            'factories' => array(
                'linkGenerator' => function ($sm) {
                    $someDependency= $sm->getServiceLocator()->get('some-dependency');

                    return new \Mynamespace\View\Helper\LinkGenerator($someDependency); //<- this is for __construct() ;)
                }
            )
        );
    }

希望这能涵盖您的问题。我猜其他一切都归结为javascript。