Zend重定向在视图助手中

时间:2013-04-12 09:26:54

标签: php zend-framework http-redirect

您好我有一个以下脚本可以在视图助手

中重定向
<?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应用程序的视图助手中重定向?感谢

3 个答案:

答案 0 :(得分:3)

当你在View Helper类中时,你不能使用$this->_helper->redirector->gotoUrl($url);,这是一个动作控制器功能。

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

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

答案 1 :(得分:2)

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

要从视图重定向(不是一个好主意BTW,逻辑应保留在控制器中,而不是在视图中),请尝试使用Zend Action View Helper

答案 2 :(得分:1)

到目前为止,这甚至更简单:

摘自Zend Framework 1.x参考: Writing Custom Helpers

  

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

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

另一方面,

Action helpers可以做你需要完成的任何事情。

这是一个非常简单的示例,用于演示在帮助程序中使用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()助手或您自己构造的助手。