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

本杰明·肖汉姆

我正在服务器上使用zf2表单对象,并在客户端上使用ajax代码来实现我的注册表单。我在ajax请求中发布了表单值,没问题,表单可以用

$form->setData($request->getPost());

验证表单并在服务器上执行注册后,我想将表单发送回客户端,特别是如果有错误,则可以将其显示给用户。我正在寻找使用zend或任何插件将表单对象序列化为JSON格式的标准方法,因此我可以在响应AJAX调用时将其发送。任何想法?

奎多

好吧,您可以做的是在表单上运行验证,然后在内返回表单new 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)验证,因为它更加方便用户使用,但这只是我想做的花哨的小技巧;)如果呈现了ViewModel

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您所使用的动作(的默认值因此,在您的情况下,您无需使用PhpRenderrer::setTemplate()但我只是将其交给您,因此如果您使用任何其他文件,则可以对其进行更改。

因此,现在您将Json在您的javascript中从我们的控制器收到信息。ViewModel从中检索新Json并删除旧的,ViewModel然后替换为新的。通过删除旧的代码,您还删除了绑定到内任何元素的所有Javascript viewModel,因此您可以在javascript中将事件设置在您的身体上,也可以将其放在属性中Form/RegistrationForm

希望这能将您推向正确的方向。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将大对象/数组序列化为JSON

来自分类Dev

如何将HttpPostedFileBase对象序列化为json

来自分类Dev

如何将数组序列化为json对象?

来自分类Dev

如何将JSON反序列化为Swift对象?

来自分类Dev

如何将数组序列化为json对象?

来自分类Dev

如何将属性序列化为 json 对象?

来自分类Dev

ZF2如何将变量传递给表单

来自分类Dev

如何将json字符串序列化为表单发布数据

来自分类Dev

如何将 JSON 嵌套对象数组反序列化为 C# 对象

来自分类Dev

如何将XML反序列化为对象?

来自分类Dev

如何将类对象序列化为xml文档

来自分类Dev

如何将XML反序列化为对象?

来自分类Dev

如何将内部 XML 反序列化为对象?

来自分类Dev

如何仅将更改的表单属性序列化为JSON

来自分类Dev

如何将树类对象结构序列化为json文件格式?

来自分类Dev

序列化为JSON时如何将属性分组为子对象

来自分类Dev

如何将JSON反序列化为具有HashMap属性的对象?

来自分类Dev

如何将ac#对象的某些字段序列化为JSON

来自分类Dev

如何将json对象反序列化为特定的子类?

来自分类Dev

序列化为JSON时如何将属性分组为子对象

来自分类Dev

如何将json字符串反序列化为对象

来自分类Dev

如何将包含不同数据类型的JSON数组反序列化为单个对象

来自分类Dev

如何将嵌套的 JSON 数据反序列化为扁平对象?

来自分类Dev

如何将具有不同值的相同 JSON 对象反序列化为 Java 类

来自分类Dev

如何将Java 2D Shape对象序列化为XML?

来自分类Dev

如何将json反序列化为PropertyType?

来自分类Dev

如何将UIImage序列化为JSON?

来自分类Dev

如何将Map [CustomType,String]序列化为JSON

来自分类Dev

如何将Python dict序列化为JSON

Related 相关文章

热门标签

归档