在视图帮助器内重定向


Zend redirect within view helper

嗨,我有一个下面的脚本在视图帮助器中重定向

<?php
class Application_View_Helper_ExistUserRev extends Zend_View_Helper_Abstract{
    public function existUserRev($params,$user)
    {
            $businessReviewMapper = new Application_Model_Mapper_BusinessReviewsMapper();
            $businessReviewModel = new Application_Model_BusinessReviews();
        $result = $businessReviewMapper->userReviewStatus($user>getUserId(),$params['bzid']);
            if($result){
            $url = 'http://www.akrabat.com';
            $this->_helper->redirector->gotoUrl($url);
                    }
        }
}
?>

但是我上面的重定向似乎不起作用。我如何在我的zend应用程序的视图助手重定向?由于

当你在视图助手类中,你不能使用$this->_helper->redirector->gotoUrl($url);,这是一个动作控制器函数。

你必须在View Helper中调用重定向器。
试试这个:

$_redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$_redirector->gotoUrl($url); 

Redirector是一个控制器ACTION helper,而不是View helper,所以你应该在控制器中使用它,而不是在视图中。

要从视图中重定向(顺便说一句,逻辑应该留在控制器中,而不是在视图中),请尝试使用Zend Action视图Helper

这比目前所展示的更简单:

节选自Zend Framework编写自定义帮助器

一般来说,类不应该回显或打印或以其他方式生成输出。相反,它应该返回要打印或回显的值。的返回值应适当转义。

基本上,视图助手应该返回一个值,而不是执行一个操作。

另一方面,动作帮助器几乎可以做任何你需要做的事情。

下面是一个非常简单的例子来演示在帮助器中使用direct()方法的形式:

<?php
/**
 * Simply returns a search form to a placeholder view helper
 *
 */
class My_Controller_Action_Helper_Search extends Zend_Controller_Action_Helper_Abstract
{
    /**
     * @param string $action
     * @param string $label
     * @param string $placeHolder
     * @return 'Application_Form_Search
     */
    public function direct($action, $label = null, $placeHolder = null)
    {
        $form = new Application_Form_Search();
        $form->setAction($action);
        $form->search->setLabel($label);
        $form->query->setAttribs(array(
            'placeholder' => $placeHolder,
            'size'        => 20,
        ));
        return $form;
    }
}

是如何在控制器中使用它来填充视图脚本或布局中的占位符帮助器的。

 public function preDispatch()
    {
        $this->_helper->layout()->search = $this->_helper->search(
            '/index/display', 'Search My Collection!', 'Search Query'
        );
    }

和在视图脚本或布局中:

<?php echo $this->layout()->search?>

在您的情况下,您可以使用一个操作帮助器来建立所需的值来构造正确的url,然后您可以将这些值传递给url()帮助器或您自己构建的帮助器。