2012-02-28 7 views
1

コア検証ルールとして機能する検証ルールを作成できますか?今、私はすべてのモデルでの検証として、この機能を使用したいコア検証ルールとして使用できるcakephpに検証ルールを作成します

function checkinput($input) 
    { 
    $arr=array('x','y','z'); 
    if(in_array($input,$arr)) 
     return false; 
    else 
     return true; 
    } 

は私がように機能を持た入力fields.Meansのために使用することができ、検証機能を使用するとします。この関数に対してカスタムルールが作成されたとします。これはname checkinputです。 私はどのようなモデルでは、この検証を使用する:あなたは、あなたの中に機能を配置することができるはず

var $validate = array(
    'name' => array(
     'notempty' => array(
      'rule' => 'notEmpty', 
      'message' => 'Please provide a name.', 
     ), 
     'checkinput' => array(
      'rule' => 'checkinput', 
      'message' => "You can't use X,Y,Z as name.", 
     ), 
    )); 

カスタム検証ルールのこの種の行動に、または他の方法で作成することができます。..

答えて

0

これはあなたを助ける必要があります。 "カスタム検証ルール" あなたは(詳細については、デバッグ出力を参照)最初array_shiftする必要が http://www.dereuromark.de/2010/07/19/extended-core-validation-rules/

とgithubの中にコードを http://www.dereuromark.de/2011/10/07/maximum-power-for-your-validation-rules/

注:

function validateCustom($field) { 
    $field = array_shift($field); 
    .... 
} 
+0

オーバーキルと思われます。 – Dave

+0

正確には何ですか? ... – mark

1

app_model.php(またはAppModel.php使用しているケーキのバージョンに応じて、これは、検証/その他の目的のために、すべてのモデルに機能へのアクセスを提供します

マニュアルを引用する:。。

モデル/ビヘイビアーのメソッドが最初にチェックされてから、Validationクラスのメソッド が検索されます。これは、アプリケーションレベル (をAppModelに追加することによって)またはモデルレベルで、既存の 検証メソッド(alphaNumeric()など)を上書きできることを意味します。

0

妥当性検査のルールを掲載しました。この例はcakephpでの検証に最適です。

public $validate = array(
    'name' => array(
      'rule' => array('custom', '/^[a-z0-9]{1,}$/i'), 
      'message' => 'Alphabets and numbers only' 
     ), 
    'user_name' => array(
     'isUnique' => array(
      'rule' => 'isUnique', 
      'message' => 'The username has already been taken.', 
     ), 
     'notEmpty' => array(
      'rule' => array('custom','/^[a-z0-9]{1,}$/i'), 
      'message' => 'Alphabets and numbers only', 
     ), 
    ), 

    /*'password' => array(
     'rule' => array('minLength', 6), 
     'message' => 'Passwords must be at least 6 characters long.', 
    ),*/ 
    'password1' => array(
    'password' => array(
     'rule' => '/^[a-z0-9]{1,}$/i', 
     'message' => 'Only letters and integers' 
     ), 

     'between' => array(
      'rule' => array('between', 6, 50), 
      'message' => 'Between 6 to 50 characters' 
     ),), 
    'confirm_password' => array(
     'equaltofield' => array(
     'rule' => array('equaltofield','password1'), 
     'message' => 'Password does not match.', 
     //'allowEmpty' => false, 
     //'required' => false, 
     //'last' => false, // Stop validation after this rule 
     'on' => 'create', // Limit validation to 'create' or 'update' operations 
     ), 
     'compare' => array(
      'rule'  => array('validate_passwords'), 
      'message' => 'The passwords you entered do not match.', 
     ) 

    ), 
    'email_address' => array(
     'email' => array(
      'rule' => array('custom','/^[A-Za-z0-9._%+-][email protected]([A-Za-z0-9-]+\.)+([A-Za-z0-9]{2,4}|museum)$/i'), 
      'message' => 'Please provide a valid email address.', 
     ), 
     'isUnique' => array(
      'rule' => 'isUnique', 
      'message' => 'Email address already in use.', 
     ), 
     ) 

    ); 

    function equaltofield($check,$otherfield) 
    { 
     //get name of field 
     $fname = ''; 

     foreach ($check as $key => $value){ 
      $fname = $key; 
      break; 
     } 



     return $this->data[$this->name][$otherfield] === $this->data[$this->name][$fname]; 
    } 
    /*public function beforeValidate(){ 

     return true; 
    }*/ 
    public function validate_passwords() { 
      return $this->data[$this->alias]['password1'] === $this->data[$this->alias]['confirm_password']; 
    } 
関連する問題