2

こんにちは、ビューヘルパー内でリダイレクトする次のスクリプトがあります

<?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 アプリのビュー ヘルパー内でリダイレクトするにはどうすればよいですか? ありがとう

4

3 に答える 3

3

ビュー ヘルパー クラスにいるため、 を使用できません$this->_helper->redirector->gotoUrl($url);。これはアクション コントローラー関数です。

View Helper でリダイレクタを呼び出す必要があります。
これを試して :

$_redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector');
$_redirector->gotoUrl($url); 
于 2013-04-12T09:47:58.927 に答える
2

Redirectorはコントローラーの ACTION ヘルパーであり、ビュー ヘルパーではないため、ビューからではなく、コントローラーから使用する必要があります。

ビューからリダイレクトするには (いい考えではありませんが、ロジックはビューではなくコントローラーにとどまる必要があります)、Zend Action View Helperを使用してみてください。

于 2013-04-12T09:38:36.417 に答える
1

これは、これまでに提示されたよりもさらに単純です。

Zend Framework 1.x リファレンスからの抜粋: カスタム ヘルパーの作成

一般に、クラスはエコー、印刷、またはその他の方法で出力を生成するべきではありません。代わりに、出力またはエコーされる値を返す必要があります。戻り値は適切にエスケープする必要があります。

基本的に、ビュー ヘルパーはアクションを実行するのではなく、値を返す必要があります。

一方、アクション ヘルパーは、実行する必要があるほとんどすべてのことを実行できます。

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()ヘルパーまたは独自の構築のヘルパーに渡すことができます。

于 2013-04-13T13:35:46.330 に答える