我需要做一个CakePHP助手,它涉及动态制作一些HTML。但代码的部分是进行 1-2 次数据库查询。这些查询对于此帮助程序非常重要,因为它填充的所有文本都在数据库中。
根据 MVC 模式,我不应该在视图(帮助程序)中进行数据库查询。我想知道这种情况的最佳设计是什么,因为我希望它也与 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);
如果它可以是 Element 而不是 Helper,你可以使用 CakePHP 的 RequestAction [详情在这里] 来提取元素所需的数据。
然后,可以将任何参数传递给 Element,并使用这些参数传递给执行模型调用的控制器。
这非常适合 MVC,因为 Element 只显示视图,但它指定了它应该从哪里获取数据(仍然使用模型来检索它),这使得它非常可重用。