我需要製作一個CakePHP幫手,它需要動態製作一些HTML。但是代碼的一部分是做1-2個數據庫查詢。這些查詢對於這個幫助程序非常重要,因爲它所填充的所有文本都在數據庫中。製作CakePHP Helper所需的建議
根據MVC模式,我不應該在View(Helper)中進行數據庫查詢。我想知道最好的設計是什麼,因爲我希望它與PHPUnit測試一致。
任何想法將受到歡迎...
我需要製作一個CakePHP幫手,它需要動態製作一些HTML。但是代碼的一部分是做1-2個數據庫查詢。這些查詢對於這個幫助程序非常重要,因爲它所填充的所有文本都在數據庫中。製作CakePHP Helper所需的建議
根據MVC模式,我不應該在View(Helper)中進行數據庫查詢。我想知道最好的設計是什麼,因爲我希望它與PHPUnit測試一致。
任何想法將受到歡迎...
由於View
工作純粹是爲了從Controller
顯示傳遞給它的(已有)的信息,我認爲這將是這樣的:
控制器:
public function foo() {
$bar = $this->MyModel->find('all');
$this->set(array('bar' => $bar));
}
您的看法:
$result = $this->MyHelper->foo($bar);
您可以創建一個組件:
/**
* 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);
組件是一個不好的地方處理數據,因爲它們綁定到控制器。應該在模型中完成並傳遞給視圖。您的示例也不顯示實際組件。 –
如果它的東西,可能不是一個助手的元素,你可以使用CakePHP的RequestAction [details here]到拉取元素所需的數據。
然後,您可以將任何參數傳遞給元素,並使用這些參數傳遞給您的控制器,從而進行模型調用。
這與MVC非常吻合,因爲元素只顯示視圖,但它指定應該從哪裏得到它的數據(仍然使用模型來檢索它),這使得它非常可重用。
聽起來不錯Paulo ...這看起來像一個可行的解決方案。我在想什麼是數據庫查詢將進入模型中的函數。這個函數將在控制器中被調用,並且輸出將被傳遞給幫助器。這樣,在測試Helper時,我可以模擬模型函數,並將它傳遞給我想要的數據,以使單元測試獨立於模型。 –