1

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

根据 MVC 模式,我不应该在视图(助手)中进行数据库查询。我想知道这种情况下最好的设计是什么,因为我希望它也与 PHPUnit 测试保持一致。

任何想法都会受到欢迎...

4

3 回答 3

2

由于这项View工作纯粹是为了显示从 传递给它的(已经可用的)信息Controller,我认为它会是这样的:

你的控制器:

public function foo() {
    $bar = $this->MyModel->find('all');
    $this->set(array('bar' => $bar));
}

您的看法:

$result = $this->MyHelper->foo($bar);
于 2012-10-10T18:43:42.580 回答
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);
于 2012-10-10T19:29:08.213 回答
0

如果它可能是一个元素而不是一个助手,你可以使用 CakePHP 的 RequestAction [详情在这里]来拉取元素所需的数据。

然后,您可以将任何参数传递给 Element,并使用这些参数传递给执行模型调用的控制器。

这非常适合 MVC,因为 Element 只显示视图,但它指定了它应该从哪里获取数据(仍然使用模型来检索它),这使得它非常可重用。

于 2012-10-10T22:42:52.207 回答