2016-09-27 96 views
4

如何在codeigniter 2.x中创建可在整个应用程序中常用的自定义验证规则?在codeigniter 2.x中创建自定义回调验证规则

我知道我们可以创建控制器回调函数,然后可以在验证规则被用作 -

$this->form_validation->set_rules('user_dob', 'Date of Birth', 'required|callback_validDate|callback_validAge'); 

现在我们可以在控制器创建验证功能 -

public function validDate($date) { 
    $d = DateTime::createFromFormat('d-M-Y', $date); 
    if ($d && $d->format('d-M-Y') == $date) 
      return TRUE; 

    $this->form_validation->set_message('validDate', ' %s is not in correct date format'); 
    return FALSE; 
} 

但有一个限制。我只能在该特定控制器内使用此方法。该功能不能用于其他控制器。我将不得不再次编写相同的代码。

为此,我尝试使用给定的验证函数创建助手文件,但是再次没有运气。

那么我怎么可以多次使用验证函数,在codeigniter的一个普通文件中创建一次?

+0

您可以使用[traits](http://php.net/manual/en/language.oop5.traits.php) –

+1

此外,您可以尝试继承'CI_Form_validation'并实现您的验证方法,因此可以将它们用作规则。或者,您可以尝试从支持[可调用规则]的CodeIgniter 3中导入'CI_Form_validation'(http://www.codeigniter.com/userguide3/libraries/form_validation.html#callable-use-anything-as-a-rule) –

+0

有一个主题,它可以给你一个关于扩展验证lib与你自己的规则的线索:http://stackoverflow.com/questions/9160610/extending-form-validation-in-codeigniter – cssBlaster21895

回答

1

我也面临同样的问题。所以我遇到了创建验证功能的解决方案,常见于控制器。

目录/application/libraries/与下面的代码创建一个文件MY_Form_validation.php -

<?php 

if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 

class MY_Form_validation extends CI_Form_validation { 

    protected $CI; 

    function __construct() { 
     parent::__construct(); 
     $this->CI = & get_instance(); 
    } 

    function validDate($date) { 
     $this->CI->form_validation->set_message('validDate', ' %s is not in correct date format'); 

     $d = DateTime::createFromFormat('d-M-Y', $date); 
     if ($d && $d->format('d-M-Y') == $date) 
      return TRUE; 

     return FALSE; 
    } 
} 
在你的控制器

现在,您可以使用功能名称作为新规则的 -

$this->form_validation->set_rules('user_dob', 'Date of Birth', 'required|validDate|validAge'); 

,如果需要你可以在控制器的构造器中加载库 -

$this->load->library('form_validation'); 

欲了解更多信息,你可以参考链接 - https://arjunphp.com/custom-validation-rules-codeigniter/