zend表单验证+ ajax

时间:2012-08-13 12:16:55

标签: ajax forms zend-framework zend-validate

我目前正在发布Zend Form Validation和Ajax的问题​​。我正在使用此方法加载要在div容器中显示的表单:

$('#' + windowId).load('transfer/format/html/id/' + number);

和转移控制器:

if ($this->_request->isXmlHttpRequest()) {
}

一切都很棒,表单被成功加载到我想要的div容器中,但是当我试图验证它时,它正在调用普通视图,我只获得一个表单,没有以前的页面包装器。任何人都知道如何验证该表单并将其保存在同一窗口中?

此致

1 个答案:

答案 0 :(得分:1)

你能领导这样的事吗? 您必须确定如何处理表单。 如果是通过Ajax - 下面的例子。

<?php
class TestController
extends Zend_Controller_Action
{


    function indexAction() {

    }

    // render form
    function getFormAction() {

        $form = new Zend_Form();
        $form->addElement('hidden', 'isSubmit', array(
            'value' => 1
        ));
        $form->addElement('text','foo', array(
            'required' => true
        ));
        $form->addElement('submit','Send', array(
            'label' => 'ok'
        ));

        // $data
        if( $_POST['isSubmit'] && $form->isValid($_POST)) {
            // ...............
        }


        if( $this->_request->isXmlHttpRequest() ) {
            // render only ajax content in layout-content.phtml
            $this->_helper->layout->setLayout('layout-content');
        } else {
            // render full page elements
            $this->_helper->layout->setLayout('layout-default');
        }

        $this->view->form = $form;

    }
}

Temlates:

<!-- index.phtml     -->
<div id="form-wrapper"></div>

<script type="text/javascript">
<!--
    $(function() {
        $("#form-wrapper").load( "<?= $this->url( array('action'=>'get-form') ) ?>");
    });
//-->   
</script>
<!-- index.phtml     -->

    <!-- get-form.phtml  -->
<?php 
if( $this->form ) {
    $this->form->setAttrib('id', 'my-form');
    $this->form->setAction( $this->url() );
    echo $this->form; 
}
?>

<script type="text/javascript">
<!--
$(function() {
    $('#my-form').submit( function() {
        var f = $(this);

        $.post(
            f.attr('action'), 
            f.serialize(), 
            function(data) { 
                $('#form-wrapper').html(data);
            }       
        );

        return false;
    }); 
});
//-->
</script>
<!-- /get-form.phtml     -->

迎接pawella