【发布时间】:2012-04-20 20:14:17
【问题描述】:
当我尝试从视图脚本调用操作时,我遇到了 Action View Helper 的问题。该视图位于 /views/scripts/home 中,它属于 HomeController,我想从 BookController 访问一个操作。
我认为有以下代码:
foreach ($this->books as $book) {
if (!empty($book['asin'])) {
$bookObj = $this->action('get-book-by-asin', 'book', null,
array('asin' => $book['asin']));
在 getBookByAsinAction() 中,我想返回一个 $data 变量。如何将其作为对 Action View Helper 调用的响应发回?
我现在可以通过控制器中的 $books 变量执行 foreach ,而不是在我的视图中执行此操作,但我只是好奇。或者,也许将来我会在特定操作可以生成更有用的可重用内容或“小部件化”内容时使用 Action View Helper。
如果我从数据库查询中获得很多行,那么只做一个 foreach 而不是两个会更好吗?一个 foreach 将在 View 中,以正确呈现结果,我应该考虑在 Controller 中执行另一个 foreach 以检查一本书是否有 ASIN,然后调用例如一个网络服务。这是最优解吗?
还是按照描述的方式使用 Action View Helper 更好?
【问题讨论】:
-
这违背了 MVC 模式的基本原则,最好重构你的代码——一个动作方法不应该返回任何数据,视图不能访问控制器。
getBookByAsin()属于模型空间,或者使用视图助手。 -
这样的业务逻辑应该早在你进入你的视野之前就发生了。
标签: php zend-framework