ZF2视图中的视图



我想创建一个具有以下行为的接口:

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,所以我的问题是,我该如何做到这一点?我可以使用什么功能?

感谢

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

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

在您的视图中,您可以调用视图助手,如:

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

你的视图助手看起来像这样:

namespace MynamespaceViewHelper;
use ZendViewHelperAbstractHelper;
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 MynamespaceViewHelperLinkGenerator($someDependency); //<- this is for __construct() ;)
}
)
);
}

希望这能涵盖你的问题。我想其他一切都可以归结为javascript。

最新更新