Zend framework 弹出窗口中的Zend表单(fancybox、lightbox…)

Zend framework 弹出窗口中的Zend表单(fancybox、lightbox…),zend-framework,popup,zend-form,fancybox,lightbox,Zend Framework,Popup,Zend Form,Fancybox,Lightbox,我正在使用Zend开发一个web应用程序,对于我遇到的一个问题,我已经没有想法了。简单地说,我正在尝试在弹出窗口中创建一个联系人表单(Fancybox、lightbox、colorbox或其他什么…)。从弹出窗口中显示联系人表单并允许发送电子邮件的意义上讲,整个程序运行良好。但是,每当出现错误(未填写的输入或填写错误)时,我都无法在弹出窗口中显示这些错误(它实际上会将我重定向回正常显示(视图+布局)中的表单以显示错误) 这也许是可能的,但我现在想,也许我可以更容易地将我的错误消息带到一个新的弹出

我正在使用Zend开发一个web应用程序,对于我遇到的一个问题,我已经没有想法了。简单地说,我正在尝试在弹出窗口中创建一个联系人表单(Fancybox、lightbox、colorbox或其他什么…)。从弹出窗口中显示联系人表单并允许发送电子邮件的意义上讲,整个程序运行良好。但是,每当出现错误(未填写的输入或填写错误)时,我都无法在弹出窗口中显示这些错误(它实际上会将我重定向回正常显示(视图+布局)中的表单以显示错误)

这也许是可能的,但我现在想,也许我可以更容易地将我的错误消息带到一个新的弹出窗口(联系人页面,填写不当,会导致错误弹出页面…)。我认为这个替代方案可能看起来很酷,但做起来确实有困难。现在我真正的问题是:我们真的可以使用Facybox在弹出窗口上制作表单吗(Lighbox或任何其他实际上…只是想要我的弹出窗口)和Zend?这里有大师吗?? 谢谢 代码如下:

链接,例如:

<a class="popLink" href=" <?php echo $this->url(array('module'=>'default', 'controller'=>'contact', 'action'=>'sendmail')).'?ProID='.$this->proProfil->getProID(); ?>">Contact</a>
表格:

class Form_ContactForm extends Zend_Form
{
  public function init ()
  {
    $this->setName("email");
    $this->setMethod('post');

    $this->addElement('text', 'mailsubject', 
    array('filters' => array('StringTrim'), 
    'validators' => array(), 'required' => true, 'label' => 'Subject:'));

    $mailattcht = new Zend_Form_Element_File('mailattcht');
    $mailattcht->setLabel('Attach File:')->setDestination(APPLICATION_PATH.'/../public/mails');
    $mailattcht->addValidator('Count', false, 1);
    $mailattcht->addValidator('Size', false, 8000000);
    $mailattcht->addValidator('Extension', false, 
    'jpg,png,gif,ppt,pptx,doc,docx,xls,xslx,pdf');
    $this->addElement($mailattcht, 'mailattcht');

    $this->addElement('textarea', 'mailbody', 
    array('filters' => array('StringTrim'), 
    'validators' => array(), 'required' => true, 'label' => 'Body:'));

    $this->addElement('submit', 'send', 
    array('required' => false, 'ignore' => true, 'label' => 'Send'));

    $this->addElement('hidden', 'return', array(
    'value' => Zend_Controller_Front::getInstance()->getRequest()->getRequestUri(),                         
            ));

    $this->setAttrib('enctype', 'multipart/form-data');
  }
}

我建议实施AJAX验证。这将允许在提交表单之前对表单进行验证。ZendCasts提供了一个很好的教程,介绍了如何实现这一点:

AJAX请求通过contextSwitch操作助手进行处理。您可以指定操作需要处理的各种上下文(xml或json)在控制器的init方法中,如下所示:

public function init()
{
    $this->_helper->contextSwitch()            
        ->addActionContext('send-mail', 'json')
        ->initContext()
    ;
}
请求url应包含一个附加到查询字符串的“format=json”。这将执行操作并以json格式发送响应。json上下文的默认行为是提取视图的所有公共属性并将其编码为json。更多详细信息可在此处找到。

我发现了一个“可能不是最漂亮的”有效的解决方案是,如前一个zendcast中提到的那样,使用ajax进行验证,以停止真正的验证(preventdefault),处理数据并返回结果,如果一切正常,则重新启动它

public function init()
{
    $this->_helper->contextSwitch()            
        ->addActionContext('send-mail', 'json')
        ->initContext()
    ;
}