【发布时间】:2018-12-01 11:59:10
【问题描述】:
我正在尝试在注册表单上显示验证错误消息。我使用 Slim 3 路由框架和 Twig 模板系统来显示 html。目前,如果用户验证失败,我正在尝试在注册表单上显示错误消息。
这是注册表单的 twig 代码,请注意 {{email_error}}、{{username_error}} 和 {{password_error}} 是用于打印表达式的 Twig 分隔符,在我的例子中是每个输入字段的错误消息。
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'),
]));
我的问题是,如何将字符串(错误消息)传递给 Slim 3 withRedirect() 响应以显示在 Twig 视图上?是否可以像我在第一组输出中渲染一个新视图一样这样做?
注意我已经尝试过 Slim Respect Validation 框架,但我更喜欢我的方式。
谢谢,GR412
【问题讨论】:
标签: php validation twig forms slim-3