我正在尝试在注册表单上显示验证错误消息。我将Slim 3框架用于路线,并使用Twig模板系统来显示html。目前,如果用户验证失败,我将尝试在注册表单上显示错误消息。
这是注册表格的树枝代码,请注意{{email_error}}
,{{username_error}}
和{{password_error}}
是用于打印表达式的树枝分隔符,在我的情况下,这是每个输入的错误消息字段。
register.html.twig:
{% extends 'header_footer.html.twig'%}
{% block content %}
<h3>Register A New Account</h3>
<form action = "{{ register_action }}" method = "post">
<p>Email: <input type="text" name="email" value="{{ old.email }}" > {{ email_error }}<br></p>
<p>Username: <input type="text" name="username" value="{{ old.username }}" > {{ username_error }}<br></p>
<p>Password: <input type="text" name="password" > {{ password_error }}<br></p>
<input type="submit" value="Create Account">
</form>
{% endblock %}
到目前为止,我已经设法通过渲染一个新视图并提供一个选项数组来实现此目的,该选项数组具有一个字符串,该字符串表示寄存器Twig文件定界符并充当数组索引。然后,每个索引的值是对ValidateSanitise类的函数的调用,该类仅返回错误消息(字符串)。当用户提交表单时验证失败时,将成功显示错误消息。这是代码和输出:
return $this->container->view->render($response, 'register.html.twig',
[
'email_error' => $sanitizer_validator->get_validate_messages('email_error'),
'username_error' => $sanitizer_validator->get_validate_messages('username_error'),
'password_error' => $sanitizer_validator->get_validate_messages('password_error'),
]);
但是,我尝试使用Slim3 withRedirect()
响应而不是渲染新视图来执行此操作,并且在提供一系列选项的情况下做了同样的事情,但是由于某些原因,如果用户验证失败,则不会出现错误消息提交表单后,注册页面将重定向,以供用户重试。这是代码和输出:
return $response->withRedirect($this->container->router->pathFor('register',
[
'email_error' => $sanitizer_validator->get_validate_messages('email_error'),
'username_error' => $sanitizer_validator->get_validate_messages('username_error'),
'password_error' => $sanitizer_validator->get_validate_messages('password_error'),
]));
我的问题是,如何将String(错误消息)传递给Slim 3 withRedirect()响应以显示在Twig视图上?是否有可能像我在第一组输出中渲染新视图那样做?
请注意,我已经尝试过Slim Respect Validation框架,但我更喜欢这样做。
谢谢GR412
答案 0 :(得分:2)
在重定向之前,您需要将消息保存到会话中
在显示表单之前,您需要从会话中获取消息。
尝试使用软件包slim/flash
// create Calendar from div HTML element
var cal = $("#calendar").kendoCalendar({
selectable: "multiple",
change: function() {
var textVal = this.value();
console.log(textVal);
}
});