Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 如何将ZF2表单对象序列化为JSON?_Ajax_Json_Forms_Zend Framework2 - Fatal编程技术网

Ajax 如何将ZF2表单对象序列化为JSON?

Ajax 如何将ZF2表单对象序列化为JSON?,ajax,json,forms,zend-framework2,Ajax,Json,Forms,Zend Framework2,我在服务器上使用zf2表单对象,在客户端使用ajax代码来实现我的注册表单。 我在ajax请求中发布表单值,没有问题,表单可以很好地处理它们 $form->setData($request->getPost()); 在我验证表单并在服务器上执行注册之后,我想将表单发送回客户端,特别是在有错误的情况下,这样我就可以将它们显示给用户。 我正在寻找一种使用zend或任何插件将表单对象序列化为JSON格式的标准方法,以便在响应AJAX调用时发送它。 有什么想法吗?您可以做的是在表单上运行验

我在服务器上使用zf2表单对象,在客户端使用ajax代码来实现我的注册表单。 我在ajax请求中发布表单值,没有问题,表单可以很好地处理它们

$form->setData($request->getPost());
在我验证表单并在服务器上执行注册之后,我想将表单发送回客户端,特别是在有错误的情况下,这样我就可以将它们显示给用户。 我正在寻找一种使用zend或任何插件将表单对象序列化为JSON格式的标准方法,以便在响应AJAX调用时发送它。
有什么想法吗?

您可以做的是在表单上运行验证,然后在
新JsonModel
中返回表单

下面是一个如何处理控制器的小示例:

class RegistrationController extends AbstractActionController 
{
    public function RegisterAction()
    {
        $form = new RegisterForm();
        $form->setInputFilter(new RegisterInputFilter());

        if ($this->getRequest()->isPost()) {
            $form->setData($this->getRequest()->getPost());

            if($form->isValid()) {
                // Handle your registration as the form is valid!
                // return to some path after registration is complete.
                // Show user he registered succesfully, etc. ;)
            }
            // Checks if the request is from JavaScript
            if($this->getRequest()->isXmlHttpRequest()) {
                return new JsonModel(array('registerForm' => $form));
            }
        }
        return new ViewModel(array('registerForm' => $form));
    }
}
请注意,表单对象包含所有无效输入,包括验证后的消息

我将采用另一种方法,只是再次完全渲染
ViewModel
,这样您可以更轻松地显示验证消息。另一方面,您可以添加客户端(Javascript)验证,因为它对用户更加友好,但这只是我会做的一些花哨的事;)如果渲染
视图模型

use Zend\View\Renderer\PhpRenderer;

if($this->getRequest()->isXmlHttpRequest()) {
    $renderer = new PhpRenderer;
    $registerViewModel = new ViewMOdel();
    $registerViewModel->setTemplate('view/register.phtml');
    return new JsonModel(array('registerViewModel' => $renderer->render($registerViewModel));
}
请注意,如果不将模板设置为您的
viewModel
,则ZF2将获得您所处操作的默认值(
view/moduleName/registration/register.phtml
)!因此,在您的情况下,不需要使用
phprenderr::setTemplate()
。但我只是把它交给你,这样你就可以在使用其他文件时更改它

现在,您将在javascript中从我们的控制器接收
Json
。从
Json
检索新的
ViewModel
,删除旧的
ViewModel
并用新的替换它。通过删除旧的,您也可以删除绑定到
viewModel
中任何元素的任何Javascript,因此您可以在Javascript中设置主体上的事件,或者在
Form/RegistrationForm
中的属性上设置事件

希望这能把你推向正确的方向