我正在服务器上使用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] 删除。
我来说两句