在這種情況下,我通常會使用front controller plugin和dispatchLoopShutdown()
鉤子執行所需的數據訪問並將數據添加到視圖/佈局。佈局腳本然後呈現該數據。
更多詳情可索取。
[更新]
假設你想從你的數據庫(或Web服務或RSS源),其獨立的請求控制器佈局內顯示最後X的新聞項目。
你的前端控制器插件可能看起來像這樣在application/plugins/SidebarNews.php
:
class My_Plugin_SidebarNews
{
public function dispatchLoopShutdown()
{
$front = Zend_Controller_Front::getInstance();
$view = $front->getParam('bootstrap')->getResource('view');
$view->sidebarNews = $this->getNewsItems();
}
protected function getNewsItems()
{
// Access your datasource (db, web service, RSS feed, etc)
// and return an iterable collection of news items
}
}
確保您的前端控制器註冊您的插件,通常在application/configs/application.ini
:
resource.frontController.plugins.sidebarNews = "My_Plugin_SidebarNews"
然後在您的佈局,照常照常渲染,或許在application/layouts/scripts/layout.phtml
:
<?php if (isset($this->sidebarNews) && is_array($this->sidebarNews) && count($this->sidebarNews) > 0): ?>
<div id="sidebarNews">
<?php foreach ($this->sidebarNews as $newsItem): ?>
<div class="sidebarNewsItem">
<h3><?= $this->escape($newsItem['headline']) ?></h3>
<p><?= $this->escape($newsItem['blurb']) ?></p>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
明白我的意思?
如果將所有的控制器使用它,也許你可以做一個基本的控制器,並從一個繼承...... – gosukiwi 2012-04-05 17:17:14
@gosukiwi在可維護性方面,我不知道是否有方法獲取擴展當前控制器實現的方式是,以走。在這種情況下,正如Liyali所述,Action_Helpers通常在ZF環境中使用,但我不知道這些工作是否適合這項工作?我認爲在選擇的答案中描述的View_Helpers的使用更適合我的用例,其中只需要從模型層簡單獲取。 – oens 2012-04-06 09:24:17