#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'
)
);
Может решить вашу проблему.