Zend Framework:如何从视图中调用Action?

时间:2012-04-20 20:14:18

标签: php zend-framework

当我尝试从视图脚本调用操作时,我遇到了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中再做一个来检查一本书是否有ASIN,然后调用例如一个Web服务。这是最佳解决方案吗?

或者以描述的方式使用Action View Helper会更好吗?

2 个答案:

答案 0 :(得分:0)

您可以创建一个新的动作助手,然后在视图中使用动作助手经纪人调用它:

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

在代码视图中:

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

$var = $gbba->direct("asin");

答案 1 :(得分:0)

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

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