代码之家  ›  专栏  ›  技术社区  ›  Roalt

后端如何在Zend框架中查找ajaxlink()调用

  •  2
  • Roalt  · 技术社区  · 16 年前

    我正在尝试在我的Web应用程序中实现一些Ajax功能,但我无法使所有的拼图块都适合:

    我想添加一个链接,单击该链接将打开一个新的输入(文本)字段,用户可以填写该字段。在后端,我想对链接进行一些管理。

    我想根据Zend框架原则,使用 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 回复  |  直到 16 年前
        1
  •  2
  •   Steve Goodman    16 年前

    您需要为此特定操作关闭视图渲染器。默认情况下,ZF启用一个名为viewrenderer的操作助手,该助手将一个常规命名的视图脚本(在您的示例中为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

        2
  •  0
  •   karim79    16 年前

    什么都没有。你所要做的就是指出你的内容的来源。在你看来:

       <?= $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