后端如何在Zend Framework中查找AjaxLink()调用

时间:2009-06-14 07:58:56

标签: php ajax zend-framework jquery

我正在尝试在我的网络应用程序中制作一些ajax功能,但我不能让所有拼图都适合:

我想添加一个链接,当点击该链接时,将打开一个可由用户填写的新输入(文本)字段。在后端,我想做一些点击链接的管理。

我想根据Zend Framework原则,使用ajaxLink()方法。任何人都可以为我做一个例子吗?我已经阅读了官方文档(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视图脚本。我也不确定我尝试使用表单输入元素的生成是否以这种方式工作。

我在this question找到了一些答案,但它不是那么优雅(需要链接中的额外参数,你需要另一个控制器),我不喜欢。

2 个答案:

答案 0 :(得分:2)

您需要为此特定操作关闭ViewRenderer。默认情况下,ZF启用一个名为ViewRenderer的Action Helper,它将常规命名的视图脚本(在您的情况下为action1.phtml)分配给特定的操作方法。由于您只是尝试返回一小段文本而不是完整的网站视图,因此不需要全视图渲染。幸运的是,这很容易。

 public function action1Action(){
     $this->_helper->viewRenderer->setNoRender();
     // the rest of your code
 }

完整的文档在这里: http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer

答案 1 :(得分:0)

没什么可说的。您所要做的就是将其指向您的内容来源。在您看来:

   <?= $this->ajaxLink("Example 1","/controller/action1", 
                                    array('update' => '#content', 
                                          'noscript' => false, 
                                          'method' => 'POST')); ?>

在您的控制器中:

echo 'Some Content';

阅读本文:

http://www.mikaelkael.fr/IMG/pdf/ZendX_Framework_1.7.x_EN.pdf