2012-12-18 70 views
0

查看我要讓有以下行爲的接口: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 /將運行一個函數,它獲得爲每個HTML/A/1 /,/ a/2 /等等。

顯然我的路由器會爲/ a /和/ a/[:number]包含兩個獨立的控制器函數,而我的控制器函數爲/ a/[:number]會返回一個具有setTerminal的ViewModel(true)。

我可以在頁面加載後用ajax調用每個URL,我這樣做的原因是我希望ajax稍後單獨更新這些html,但在第一次調用時應該在調用/ a /時將HTML的那些部分渲染得更快。

正如我所看到的,我需要一個返回HTML/a/[:number] /的函數,所以我的問題是,我該怎麼做?我可以使用什麼功能?

感謝

回答

0

你會寫一個視圖助手(Zend的擴展\查看\助手\ 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。

+0

我對zf2相當陌生,你能澄清一下'某些依賴'是指什麼嗎?我有: ' 'invokables'=>陣列( '一些依賴性'=> 'MyModule的\輔助\ LinkGenerator', ),' 但我得到一個錯誤'的ServiceManager ::得到無法獲取或爲某個依賴項創建一個實例。 – Shoreline

+0

在這種情況下''some-dependency''可能是您需要使LinkGenerator工作的另一個依賴項。它不是LinkGenerator。它可能是某種形式的'tableGateway'或'Repository'。因爲你需要知道有多少鏈接需要輸出,不能用魔術來完成,所以我的假設是你需要某種依賴注入;) – Sam

+0

我實際上使用了模塊config中的invokables部分最終因爲我不需要特殊的構造函數。感謝您提供的信息,它確實幫助我爬上了陡峭的學習曲線。 – Shoreline