2


3

Zend FrameworkでバックエンドはAjaxLink()呼び出しをどのように探しますか?

私は自分のWebアプリケーションにajax機能を追加しようとしていますが、すべてのパズルのピースを合わせることはできません。

クリックすると、ユーザーが入力できる新しい入力(テキスト)フィールドを開くリンクを追加します。 バックエンドでは、リンクがクリックされたことを管理したいと思います。

Zend Frameworkの原則に従って、 `+ ajaxLink()+`メソッドを使用してやりたいと思います。 誰かが私のために例を持つことができますか? 公式ドキュメント(http://framework.zend.com/manual/en/zendx.jquery.html[ZendX_JQuery])を読んだことがありますが、それだけでは役に立ちません。

私のフロントエンド(ビュー)コードはこんな感じです。

<?= $this->ajaxLink("Subscribe", $this->url(array('controller' => 'mycontroller', 'action' => 'action1', 'id' => $event['id'])),
                                        array("beforeSend" => "hide",
                                              "update" => "#pb_" . $event['id'],
                                              'noscript' => false,
                                              'method' => 'POST')); ?>

私のバックエンドコードはこんな感じです。

public function action1Action()
    {
        if( !$this->loggedIn || ! $this->athlete) {
            $this->_redirect('index');
        }
        if(! $this->_request->isXmlHttpRequest())
        {
            //The request was NOT made with JS XmlHttpRequest
            die;
        }
        // Do some administration
        // (removed to make this easier in this example)

        $pb = new Zend_Form_Element_Text('PB');
        $pb->setLabel('PB:')
                  ->addValidator('StringLength', false, array(0,20))
                  ->setRequired(false);
        $renderText = $pb->render();

        return $renderText;

    }

与えられたメソッドがaction1.phtmlビュースクリプトを検索したいというエラーが戻ってきます。 私がフォーム入力要素の生成を使ってやろうとしていることがこのように機能するかどうかもわかりません。

私はいくつかの答えをhttps://stackoverflow.com/questions/565235/jquery-and-zend-framework-problem [この質問]で見つけましたが、それはそれほどエレガントではありません(リンクに追加のパラメータを必要とし、別のものが必要私は好きではありません。

2 Answer


2


この特定のアクションに対してはViewRendererをオフにする必要があります。 デフォルトではZFはViewRendererと呼ばれるAction Helperを有効にします。これは通常の名前のビュースクリプト(あなたの場合はaction1.phtml)を特定のアクションメソッドに割り当てます。 フルサイトビューではなく、テキストの小さな断片を返すようにしているだけなので、フルビューレンダリングは必要ありません。 幸い、これは簡単です。

パブリック関数action1Action(){$ this  - > _ helper-> viewRenderer-> setNoRender(); //残りのコード}

完全なドキュメントはこちらです:http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer


0


何もありません。 あなたがしなければならないのはあなたのコンテンツがどこから来ているのかそれを指すことだけです。 あなたの見解では:

<?= $ this-> ajaxLink( "例1"、 "/ controller / action1"、配列( 'update' => '#content'、 'noscript' => false、 'method' => 'POST'))) ; ?

あなたのコントローラーで:

'Some Content'をエコーし​​ます。

これを読む: