0

我想制作一个具有以下行为的界面:

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,我这样做的原因是我想稍后单独更新这些 html 片段,但在第一次调用时,渲染速度应该更快调用 /a/ 时的那些 HTML 部分。

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

谢谢

4

1 回答 1

0

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

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

在您的视图中,您会调用视图助手,例如:

$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。

于 2012-12-18T07:21:17.577 回答