在Codeigniter中,以下代码通常用于具有表单的页面。但是,当用户第一次登陆页面并且表单验证失败时,将通过相同的路径进行路由。
如此示例所示,闪存数据将触发。即使用户只是登陆页面而尚未提交任何表格。
我正在尝试将新类名回显到某个输入字段,以便在验证失败时突出显示它们。但目前它也突出了首次加载的领域。
我知道我可以回显validation_error或form_error。有没有办法回应一个没有绑定到字段名称的通用消息,只有在提交失败后
// rules and other stuff above
if ($this->form_validation->run() == FALSE){
$this->session->set_flashdata('errorClass',"is-invalid");
$this->load->view('defaultOrFalse');
}else{
$this->load->view('success');
}
//view file
<input class=" <?php $this->session->flashdata('errorClass') ; ?>">
基本上我试图让bootstrap 4的输入验证显示出来 https://getbootstrap.com/docs/4.0/components/forms/#server-side
答案 0 :(得分:1)
我不知道您的确切设置,但您可以执行以下逻辑:
<?php
class Some_controller extends CI_Controller {
// controller/search/{$term}
public function some_method($term = null) {
// where some_field is some field in your form
// that gets posted on submit
if ($this->input->post('some_field')) {
// or if (isset($_POST)) {
if ($this->form_validation->run() == FALSE) {
$this->session->set_flashdata('errorClass', "is-invalid");
$this->load->view('defaultOrFalse');
} else {
$this->load->view('success');
}
} else {
// default view
}
}
}
?>
关于你的第二个问题:
<h5>Username</h5>
<?php echo form_error('username'); ?>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" <?php if (!empty(form_error('username'))) { echo "class='error'"; } ?> />
还可以使用帮助器而不是使用form_error
来检查字段是否有错误(没有验证这是否有效但是应该)。
/**
* Checks if form validation field by name
* has error
*
* @param string $field Name of field
* @return boolean
*/
function field_has_error($field) {
$CI = &get_instance();
$CI->load->library('form_validation');
$arr = $CI->form_validation->error_array();
if (isset($arr[$field])) {
return true;
}
return false;
}
用法:
<?php if (field_has_error('username')) { echo "class='error'"; } ?> />