Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 配置中的Codeigniter表单验证取决于另一个输入_Php_Codeigniter - Fatal编程技术网

Php 配置中的Codeigniter表单验证取决于另一个输入

Php 配置中的Codeigniter表单验证取决于另一个输入,php,codeigniter,Php,Codeigniter,我正在使用Codeigniter表单验证配置(而不是手动设置规则)。我需要的是根据其他字段设置所需规则。例如,假设我们有以下规则: 'user' => array( array( 'field' => 'user[phone]', 'rules' => 'required' ), array( 'field' => 'user[email]', ), array( 'f

我正在使用Codeigniter表单验证配置(而不是手动设置规则)。我需要的是根据其他字段设置所需规则。例如,假设我们有以下规则:

'user' => array(
    array(
        'field' => 'user[phone]',
        'rules' => 'required'
    ),
    array(
        'field' => 'user[email]',
    ),
    array(
        'field' => 'user[foo]',
        //'rules' => 'required'
    )
),
必须根据
email
字段要求输入
foo


注意:这可以通过回调函数来完成,但在大型应用程序中会有点困难。有什么想法吗?

在您的
APPPATH.config/form\u validation.php'
文件集中使用分隔规则数组

$config = array(
    'yes_email' => array(
        array(
            'field' => 'user[phone]',
            'rules' => 'required'
        ),
        array(
            'field' => 'user[email]',
        ),
        array(
            'field' => 'user[foo]',
            'rules' => 'required'
        )
    ),
    'no_email' => array(
        array(
            'field' => 'user[phone]',
            'rules' => 'required'
        ),
        array(
            'field' => 'user[email]',
        ),
        array(
            'field' => 'user[foo]',
        )
    ),
);
,然后在控制器中使用所需的任何规则集。举例来说

if ($this->form_validation->run($rule) == FALSE) {
    $this->load->view('myform');
} else {
    $this->load->view('formsuccess');
}
在进行此检查之前,您应该确定需要什么规则,例如:

$rule = 'no_email'; // set default value

switch($this->input->post('email')) {
    case false:
        break;
    default:
        $rule = 'yes_email'; // email has been posted / needed by app etc.
}

更多信息。

您可以使用javascript或jQuery编写自定义验证。@jagad89我已经通过
Angularjs
实现了js验证。这是关于服务器端验证的。如果您使用CI 3.x,请看一看,谢谢。但是,
anonymous
函数可能是比这更好的解决方案。这段代码正在实现现有的CodeIgniter资源/结构。回调函数是另一种方式。你可以用任何你想用的方式。