Oop 制作CakePHP助手时需要的建议
我需要制作一个CakePHP助手,它涉及动态生成一些HTML。但是代码的一部分是进行1-2次数据库查询。这些查询对于这个助手非常重要,因为它填充的所有文本都在数据库中 根据MVC模式,我不应该在视图(Helper)中进行DB查询。我想知道对于这个案例,最好的设计是什么,因为我希望它也与PHPUnit测试保持一致Oop 制作CakePHP助手时需要的建议,oop,cakephp,cakephp-helper,Oop,Cakephp,Cakephp Helper,我需要制作一个CakePHP助手,它涉及动态生成一些HTML。但是代码的一部分是进行1-2次数据库查询。这些查询对于这个助手非常重要,因为它填充的所有文本都在数据库中 根据MVC模式,我不应该在视图(Helper)中进行DB查询。我想知道对于这个案例,最好的设计是什么,因为我希望它也与PHPUnit测试保持一致 任何想法都是受欢迎的…因为视图工作纯粹是显示从控制器传递给它的(已经可用)信息,我认为它应该是这样的: 您的控制器: public function foo() { $bar =
任何想法都是受欢迎的…因为
视图
工作纯粹是显示从控制器
传递给它的(已经可用)信息,我认为它应该是这样的:
您的控制器:
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来提取元素所需的数据 然后可以将任何参数传递给元素,并使用这些参数传递给控制器,控制器执行模型调用
这非常适合MVC,因为元素只显示视图,但它指定了从何处获取数据(仍然使用模型检索数据),这使得它非常可重用。组件是处理数据的不好地方,因为它们与控制器绑定。应该在模型中完成,并传递给视图。您的示例也没有显示实际的组件。听起来不错,保罗……这看起来是一个可行的解决方案。我的想法是,数据库查询将进入函数的模型中。此函数将在控制器中调用,输出将传递给助手。这样,在测试助手时,我可以模拟模型函数,并向它传递我想要的数据,以便使单元测试独立于模型。