PHP-在带有Slim 3 withRedirect()响应的Twig视图上显示验证消息

时间:2018-12-01 11:59:10

标签: php validation twig html-form slim-3

我正在尝试在注册表单上显示验证错误消息。我将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'),
    ]);

enter image description here

但是,我尝试使用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'),
    ]));

enter image description here

我的问题是,如何将String(错误消息)传递给Slim 3 withRedirect()响应以显示在Twig视图上?是否有可能像我在第一组输出中渲染新视图那样做?

请注意,我已经尝试过Slim Respect Validation框架,但我更喜欢这样做。

谢谢GR412

1 个答案:

答案 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);
  }
});