2012-10-10 444 views
1

我需要製作一個CakePHP幫手,它需要動態製作一些HTML。但是代碼的一部分是做1-2個數據庫查詢。這些查詢對於這個幫助程序非常重要,因爲它所填充的所有文本都在數據庫中。製作CakePHP Helper所需的建議

根據MVC模式,我不應該在View(Helper)中進行數據庫查詢。我想知道最好的設計是什麼,因爲我希望它與PHPUnit測試一致。

任何想法將受到歡迎...

回答

2

由於View工作純粹是爲了從Controller顯示傳遞給它的(已有)的信息,我認爲這將是這樣的:

控制器:

public function foo() { 
    $bar = $this->MyModel->find('all'); 
    $this->set(array('bar' => $bar)); 
} 

您的看法:

$result = $this->MyHelper->foo($bar); 
+0

聽起來不錯Paulo ...這看起來像一個可行的解決方案。我在想什麼是數據庫查詢將進入模型中的函數。這個函數將在控制器中被調用,並且輸出將被傳遞給幫助器。這樣,在測試Helper時,我可以模擬模型函數,並將它傳遞給我想要的數據,以使單元測試獨立於模型。 –

1

您可以創建一個組件:

/** 
* Set data info 
* @access public 
* @return void 
*/ 
public function setData() 
{ 
    $data = $this->Model->find('first', $params); 
    $this->Controller->set('data', $data); 
} 

而且在佈局打印助手:

echo $this->MyNewHelper->someHtml($data); 
+1

組件是一個不好的地方處理數據,因爲它們綁定到控制器。應該在模型中完成並傳遞給視圖。您的示例也不顯示實際組件。 –

0

如果它的東西,可能不是一個助手的元素,你可以使用CakePHP的RequestAction [details here]到拉取元素所需的數據。

然後,您可以將任何參數傳遞給元素,並使用這些參數傳遞給您的控制器,從而進行模型調用。

這與MVC非常吻合,因爲元素只顯示視圖,但它指定應該從哪裏得到它的數據(仍然使用模型來檢索它),這使得它非常可重用。