我正试图将验证规则从控制器移动到配置文件中。我正在遵循这里记录的指示,但我无法让它发挥作用。提交表单时,不会执行验证。回声validation_errors()
不打印任何内容。
在进行了一些挖掘之后,表单验证库中的run()
方法返回false,因为没有设置配置规则。以下是摘录:
system/librarys/Form_validation.php:
// No validation rules? We're done...
if (count($this->_config_rules) == 0)
{
return FALSE;
}
如有任何帮助,我们将不胜感激。这是我的代码:
application/controllers/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 */
application/config/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。
您需要在run方法中传递配置变量。阅读你发布的链接中名为"调用特定规则组"的部分。
也许这是您的错别字,但配置应该存储在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'))
一些事情。。。
您是否已在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
。