2012-02-28 4 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

+0

что именно? ... – mark

1

Вы должны быть в состоянии поместить функцию в app_model.php (или AppModel.php в зависимости от того, какой версии Cake вы используете Это даст всем вашим моделям доступ к функции для проверки/других целей

Процитируют руководство:..

Сначала проверены методы модели/поведения, прежде чем искать метод в классе Validation. Это означает, что вы можете переопределить существующие методы проверки (например, alphaNumeric()) на уровне приложений (, добавив метод в AppModel) или на уровне модели.

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']; 
    } 
Смежные вопросы