Oop 制作CakePHP助手时需要的建议

Oop 制作CakePHP助手时需要的建议,oop,cakephp,cakephp-helper,Oop,Cakephp,Cakephp Helper,我需要制作一个CakePHP助手,它涉及动态生成一些HTML。但是代码的一部分是进行1-2次数据库查询。这些查询对于这个助手非常重要,因为它填充的所有文本都在数据库中 根据MVC模式,我不应该在视图(Helper)中进行DB查询。我想知道对于这个案例,最好的设计是什么,因为我希望它也与PHPUnit测试保持一致 任何想法都是受欢迎的…因为视图工作纯粹是显示从控制器传递给它的(已经可用)信息,我认为它应该是这样的: 您的控制器: public function foo() { $bar =

我需要制作一个CakePHP助手,它涉及动态生成一些HTML。但是代码的一部分是进行1-2次数据库查询。这些查询对于这个助手非常重要,因为它填充的所有文本都在数据库中

根据MVC模式,我不应该在视图(Helper)中进行DB查询。我想知道对于这个案例,最好的设计是什么,因为我希望它也与PHPUnit测试保持一致


任何想法都是受欢迎的…

因为
视图
工作纯粹是显示从
控制器
传递给它的(已经可用)信息,我认为它应该是这样的:

您的控制器:

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,因为元素只显示视图,但它指定了从何处获取数据(仍然使用模型检索数据),这使得它非常可重用。

组件是处理数据的不好地方,因为它们与控制器绑定。应该在模型中完成,并传递给视图。您的示例也没有显示实际的组件。听起来不错,保罗……这看起来是一个可行的解决方案。我的想法是,数据库查询将进入函数的模型中。此函数将在控制器中调用,输出将传递给助手。这样,在测试助手时,我可以模拟模型函数,并向它传递我想要的数据,以便使单元测试独立于模型。