2016-09-27 7 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'を実行して検証メソッドを実装することで、ルールとして使用できます。あるいは、[呼び出し可能なルール](http://www.codeigniter.com/userguide3/libraries/form_validation.html#callable-use-anything-as-a-rule)をサポートするCodeIgniter 3から 'CI_Form_validation'をインポートしようとすることができます。 –

+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/

関連する問題