Zend Framework:如何从视图调用操作


Zend Framework: How to call an Action from a View?

当我尝试从视图脚本调用操作时,操作视图助手出现问题。该视图位于/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变量。如何将其作为对操作视图帮助程序调用的响应发送回?

我现在可以通过控制器中的变量$books而不是在我看来做一个foreach,但我只是好奇。或者,也许将来当特定操作可以生成更有用的可重用内容或"小部件化"内容时,我将使用操作视图帮助程序。

如果我从数据库查询中获取许多行,那么只做一个 foreach 而不是两个会更好吗?一个foreach将在视图中,以正确呈现结果,我应该考虑在控制器中执行另一个以检查一本书是否有ASIN,然后调用例如Web服务。这是最佳解决方案吗?

还是按所述方式使用操作视图帮助程序更好?

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

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

在代码视图中:

$gbba= Zend_Controller_Action_HelperBroker::getStaticHelper('getBookByAsin');
$var = $gbba->direct("asin");

我的解决方案是用以下行结束getBookByAsinAction():$this->_response->setBody(json_encode($data));和我的观点$book = (array) json_decode($bookObj);

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