2016-09-27 64 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/