我正在尝试将验证规则从控制器移动到配置文件中。我按照文件here的说明进行操作,但我无法使用它。提交表单时,验证不会执行。回应validation_errors()
不打印任何内容。
在进行一些挖掘之后,表单验证库中的run()
方法返回 false ,因为没有设置配置规则。这是一段摘录:
系统/库/ Form_validation.php:
// No validation rules? We're done...
if (count($this->_config_rules) == 0)
{
return FALSE;
}
任何帮助将不胜感激。这是我的代码:
应用/控制器/ signup.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Signup extends CI_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
if ($this->form_validation->run()) {
$this->user_model->insert(array(
'email_address' => $this->input->post('email_address'),
'password' => $this->input->post('password'),
));
redirect('/log-in');
}
$this->load->view('header');
$this->load->view('signup/index');
$this->load->view('footer');
}
}
/* End of file signup.php */
/* Location: ./application/controllers/signup.php */
应用/配置/ form_validation.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config = array(
'signup/index' => array(
array(
'field' => 'email_address',
'label' => 'Email Address',
'rules' => 'trim|required|max_length[255]|valid_email|email_in_use'
),
array(
'field' => 'password',
'label' => 'Password',
'rules' => 'required|min_length[6]'
),
array(
'field' => 'confirm_password',
'label' => 'Confirm Password',
'rules' => 'required|matches[password]'
),
),
);
/* End of file form_validation.php */
/* Location: ./application/config/form_validation.php */
我正在使用CI 2.1.0。
答案 0 :(得分:0)
您需要在run方法中传递config var。阅读发布链接中名为“呼叫特定规则组”的部分。
答案 1 :(得分:0)
也许这是你身边的错字,但配置应该存储在application/config/form_validation.php
内(而不是你在帖子中写的“application / controllers / signup.php”)。
这种方式应该自动调用。
扩展@Catfish所说的,你可以:
不要创建不同的规则集(如果只需要一个),并且您的数组将如下所示:
$config = array(
array(
'field' => 'username',
'label' => 'Username',
'rules' => 'required'
),
array(
创建不同的规则集,遵循您使用的结构;但在这种情况下,您需要传递到要使用的run()
方法 规则。所以,在你的情况下,它应该是
if($this->form->validation->run('signup/index'))
答案 2 :(得分:0)
一些事情......
您是否在config/autoload.php
中加载了form_validation库?因为我没有看到它被加载到您的控制器中。如果要在控制器中加载$this->load->library('form_validation')
。
我看到名为email_in_use
的电子邮件字段的规则,此规则存储在何处?如果您要创建自定义规则,请确保它位于libraries/MY_Form_validation.php
。
我从未使用过控制器/功能方法,它一直对我有用。我会使用类似$this->form_validation->run('login');
之类的东西。
您能否确认验证run()
调用是评估为true还是false?您的页面是否重定向到登录? (顺便说一句:我认为您不需要重定向呼叫中的/
。
最后,您是否将PHP错误打开到E_ALL?检查php.ini
。