CodeIgniter集成Twig后表单验证消息无法显示问题求助
解决CodeIgniter集成Twig时表单验证消息不显示的问题
刚接触Twig遇到这种问题很正常,我来帮你排查下核心原因——大概率是表单验证的错误信息没正确传递到Twig模板里,或者模板里的调用方式不对。下面给你一步步的解决方案:
第一步:在控制器里传递验证错误信息
当表单验证失败时,你需要把CodeIgniter表单验证类生成的错误数据,通过Twig的渲染参数传进模板里。修改你的user_register方法:
public function user_register() { $this->form_validation->set_rules('username', 'Username', 'trim|required'); $this->form_validation->set_rules('password', 'Password', 'trim|required'); if ($this->form_validation->run() == FALSE) { // 把所有错误信息打包成数组传给Twig $data['validation_errors'] = $this->form_validation->error_array(); // 顺便传递表单旧值,方便用户重新填写 $data['old_input'] = $this->input->post(); // 渲染Twig模板时带上这些数据 $this->twig->display('register.twig', $data); } else { // 验证成功后的逻辑,比如保存用户、跳转 redirect('user/login'); } }
第二步:在Twig模板里显示错误信息
现在你可以在模板里根据传递的validation_errors数组,针对性地显示单个字段的错误,或者批量显示所有错误:
单个字段错误显示示例
<div class="form-group"> <label for="username">用户名</label> <input type="text" name="username" id="username" value="{{ old_input.username|default('') }}"> {# 检查当前字段是否有错误,有就显示 #} {% if validation_errors.username %} <span class="text-danger">{{ validation_errors.username }}</span> {% endif %} </div> <div class="form-group"> <label for="password">密码</label> <input type="password" name="password" id="password"> {% if validation_errors.password %} <span class="text-danger">{{ validation_errors.password }}</span> {% endif %} </div>
批量显示所有错误示例
如果想一次性展示所有验证错误,可以这么写:
{% if validation_errors is not empty %} <div class="alert alert-danger"> <ul> {% for field, error in validation_errors %} <li>{{ error }}</li> {% endfor %} </ul> </div> {% endif %}
可选:让Twig直接支持CI的表单验证方法
如果你不想每次都手动传递错误数组,可以检查你用的「CodeIgniter Simple and Secure Twig」是否配置了全局访问CI实例。如果配置了,你可以直接在模板里调用CI的表单验证方法:
{# 直接调用form_validation的error方法获取单个字段错误 #} {% if form_validation.error('username') %} <span class="text-danger">{{ form_validation.error('username') }}</span> {% endif %}
不过这个要看集成包的具体配置,如果你不确定,还是用前面手动传递数据的方法更稳妥。
内容的提问来源于stack exchange,提问作者Dan Angelo Alcanar
相关产品推荐
相关产品推荐

