【问题标题】:Codeigniter form validation in config depends on another input配置中的 Codeigniter 表单验证取决于另一个输入
【发布时间】:2017-10-10 13:17:40
【问题描述】:

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

'user' => array(
    array(
        'field' => 'user[phone]',
        'rules' => 'required'
    ),
    array(
        'field' => 'user[email]',
    ),
    array(
        'field' => 'user[foo]',
        //'rules' => 'required'
    )
),

foo 输入必须基于email 字段。

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

【问题讨论】:

  • 您可以使用 javascript 或 jQuery 编写自定义验证。
  • @jagad89 我已经通过Angularjs实现了js验证。这是关于服务器端验证的。
  • 如果您使用 CI 3.x,请查看HERE

标签: php codeigniter


【解决方案1】:

在您的 APPPATH.'config/form_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.
}

docs 中的更多信息。

【讨论】:

  • 谢谢。但也许anonymous 函数是比这更好的解决方案。
  • 这段代码正在实现已经存在的 CodeIgniter 资源/结构。回调函数是另一种方式。你可以使用任何你想要的方式。
猜你喜欢
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2013-02-17
相关资源
最近更新 更多