我需要制作一个CakePHP助手,它涉及动态制作一些HTML。但是代码的一部分是进行1-2次数据库查询。这些查询对于这个帮助程序非常重要,因为它填充的所有文本都在数据库中。
根据MVC模式,我不应该在View(Helper)中进行数据库查询。我想知道这个案例的最佳设计是什么,因为我希望它与PHPUnit测试一致。
欢迎任何想法......
答案 0 :(得分:2)
由于View
作业纯粹是为了显示从Controller
传递给它的(已经可用)信息,我认为它会是这样的:
你的控制器:
public function foo() {
$bar = $this->MyModel->find('all');
$this->set(array('bar' => $bar));
}
您的观点:
$result = $this->MyHelper->foo($bar);
答案 1 :(得分: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);
答案 2 :(得分:0)
如果它可以是Element而不是Helper,您可以使用CakePHP的RequestAction [details here]来提取Element所需的数据。
然后,您可以将任何参数传递给元素,并使用这些参数传递给控制器,控制器进行模型调用。
这非常适合MVC,因为Element只显示视图,但是它指定了应该获取数据的位置(仍然使用模型来检索它),这使得它非常可重用。