создать правило проверки в CakePHP, которое можно использовать в качестве основных правил проверки - PullRequest
1 голос
/ 28 февраля 2012

можем ли мы создать правила проверки, которые могут работать как основное правило проверки.

Предположим, я хочу использовать функцию проверки, которую можно использовать для полей ввода. Значит, у меня есть такая функция:

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.",
        ),
    ));

Можно ли создать этот тип пользовательского правила проверки в поведении или другим методом ..

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

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

Цитировать инструкцию:

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

0 голосов
/ 03 июня 2014

Мы опубликовали правила проверки. этот пример лучше всего подходит для проверки в 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._%+-]+@([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'];
    }
0 голосов
/ 28 февраля 2012

Это должно помочь вам: «Пользовательские правила проверки» 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);
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...