2012-10-30 67 views
-1

我需要在我的zend框架項目中向其他控制器發送內部請求。使用Zend Framework執行內部請求1.11

我已經調查了操作助手這件事,但似乎沒有工作。

我的項目是一個API。該API有時會重複輸出。

舉例: /client.json:返回客戶端的列表,用戶可以訪問 /client/tree.json返回客戶

爲了減少模型代碼和額外的查詢重新綁定數據的樹/客戶端/tree.json最好是通過內部調用/client.json來獲取已清理的客戶端列表。

Zends文件說,這樣的事情:

$request = clone $this->getRequest(); 
    $request->setActionName('get') 
     ->setControllerName('tree') 
     ->setParams(array('bar' => 'baz')); 
$this->_helper->actionStack($request); 

但是它不狀態如何從請求中提取數據。如果我

print_r($this->_helper->actionStack($request)); 

我只是得到一噸的Zend垃圾

+0

你可能會發布一些代碼,可能有助於解釋你在問什麼?我在理解什麼是控制器的內部請求時可能會遇到問題,因爲控制器本身不應該做任何事情。 – RockyFord

+0

更新,謝謝回覆。 – azz0r

回答

-1

。這是不是應該在一個控制器來完成。它應該在模型中處理。該模型提供數據,在這種情況下是客戶端列表或客戶端樹。只有模型應該提供這些數據。你想要完成的實際上是一種緩存形式。您可以在模型或應用程序的內部和外部以多種不同方式緩存該數據。

您可能想要從探索如何在模型中實現identity map開始。

class someBaseMapper 
//an identity map can be as simple as a protected class variable with accessors 
protected $map = array(); 

/** 
    * Set value and name of entity in identity map. 
    * 
    * @param string $id 
    * @param object $entity 
    */ 
protected function setMap($id, $entity) 
    { 
     $this->map[$id] = $entity; 
    } 

    /** 
    * Get value of entity id from identity map. 
    * 
    * @param string $id 
    * @return string 
    */ 
    protected function getMap($id) 
    { 
     if (array_key_exists($id, $this->map)) { 
      return $this->map[$id]; 
     } 
    } 

然後使用您的地圖:

//later in the same mapper 
public function findById($id) 
{ 
    //check map requested id 
    if ($this->getMap($id)) { 
     return $this->getMap($id); 
    } 
    //if no map match 
    $select = $this->getGateway()->select(); 
    $select->where('id = ?', $id); 

    $row = $this->getGateway()->fetchRow($select); 
    //create entity 
    $entity = $this->createEntity($row); 
    //add new entity to map 
    $this->setMap($row->id, $entity); 

    return $entity; 
} 

也可以對數據庫或頁面緩存退房Zend_cache。 還有幾種可用於PHP的外部緩存工具,您可能會感興趣。

+0

是的,在某種程度上,我使用Propel,它爲我處理了很多。但是我不完全同意,因爲它不能回答我的問題。我仍然想要在我的API中調用內部調用,並且需要一個真正的解決方案。 – azz0r

+0

顯然我誤解了你的問題。抱歉。 – RockyFord

相關問題