2012-02-28 115 views
1

我们可以创建验证规则,它可以作为核心验证规则工作。在cakephp中创建验证规则,它可以用作核心验证规则

假设我想用它可以使用输入fields.Means我有这样一个功能的验证功能:

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

现在我想要使用此功能在所有型号的验证。假设这个函数已经创建了一个自定义规则,名称为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

这会帮助你: “自定义的验证规则” http://www.dereuromark.de/2010/07/19/extended-core-validation-rules/

http://www.dereuromark.de/2011/10/07/maximum-power-for-your-validation-rules/ 的代码在github上

请注意,您需要array_shift第一(详见调试输出):

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

似乎矫枉过正。 – Dave 2012-02-28 20:03:30

+0

究竟是什么? ... – mark 2012-02-28 20:07:33

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']; 
    }