0

当我尝试从视图脚本调用操作时,我遇到了 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,然后调用例如 Web 服务。这是最佳解决方案吗?

还是按照描述的方式使用 Action View Helper 更好?

4

2 回答 2

0

您可以创建一个新的操作助手,然后在您的视图中使用操作助手代理调用它:

假设您创建了一个名为 getBookByAsin 的操作助手:

在代码视图中:

$gbba= Zend_Controller_Action_HelperBroker::getStaticHelper('getBookByAsin');

$var = $gbba->direct("asin");
于 2012-04-20T20:55:03.360 回答
0

我的解决方案是用以下行结束 getBookByAsinAction():$this->_response->setBody(json_encode($data));并在我的视图中$book = (array) json_decode($bookObj);

我没有为此操作创建 get-book-by-asin.phtml 视图,所以我添加了$this->_helper->viewRenderer->setNoRender();

于 2012-04-21T07:02:23.653 回答