当我尝试从视图脚本调用操作时,我遇到了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会更好吗?
答案 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();