проверка формы в cakephp

#php #validation #cakephp

#php #проверка #cakephp

Вопрос:

У меня есть одна модель login — в ней 5 полей. Во время регистрации я проверяю все поля, но когда я редактирую запись, я хочу проверить только некоторые поля перед сохранением данных.

Я использую этот код:

 if ($this->Login->validates(array('fieldList' => array('password','name')))) {
    if ($this->Login->save($this->data)) {
        echo 'helllo';exit;
        //$this->Session->setFlash('Your post has been updated.');
        //$this->redirect(array('action' => 'profile'));
    }else {

    }
} else {

}
  

Но это не работает.

Ответ №1:

Вы должны правильно это сделать, установив on значение create в правиле проверки. Повторять эту логику в контроллере каждый раз плохо.

Конкретная проблема в вашем случае заключается в том, что save выполняется повторная проверка, причем проверка всех полей. На самом деле, первый вызов validates совершенно излишен. Вам придется использовать третий $fieldlist параметр save функции, если вы хотите сохранить / подтвердить только определенные поля:

 $this->Login->save($this->data, true, array('password','name'))
  

Комментарии:

1. это потому, что я использую первичный ключ someid вместо id.

Ответ №2:

Вам лучше все разделить, сначала вы проверяете, если все идет нормально, только после этого сохраняете любые данные.

Проверка должна вернуть некоторые данные, в которых произошел сбой, кроме того, существуют разные типы данных, разные вещи для проверки, для каждого поля — должна быть некоторая классификация для вашего сайта, каковы ограничения для конкретного поля.

Ответ №3:

Если я вас правильно понимаю, вы хотите, чтобы проверка применялась только к create , а не update . В Cake встроена эта функциональность.

В вашей модели, где есть правила проверки каждого поля, у вас будет что-то похожее на:

 var $validate = array(
    'fieldName1' => array(
        'rule' => 'ruleName', // or: array('ruleName', 'param1', 'param2' ...)
        'required' => true,
        'allowEmpty' => false,
        'on' => 'create', // or: 'update'       ** here **
        'last' => false,
        'message' => 'Your Error Message'
    )
);
  

Может решить вашу проблему.