Если Model-> validates () возвращает false
, есть ли простой способ узнать почему?
Я пытаюсь сохранить некоторые данные, но они не сохранятся. Оказывается, это тоже не валидация. Если я отключу проверку, это сохранит. Я должен подтвердить это, хотя, но я не могу сказать, почему это не подтверждает?
Я использовал этот код:
if($this->User->create($user) && !$this->User->validates())
{
debug($user);
}
Так что, если он не проверяется, он говорит мне, что это за данные.
Распечатывает это:
Array
(
[User] => Array
(
[first_name] => Tim
[last_name] => Zahn
[phone] => 8833323235
[email] => t@z.com
[password] => ert
)
[Confirm] => Array
(
[email] => t@z.com
[password] => ert
)
)
Похоже, он должен пройти проверку.
Также, если необходимо, я также могу опубликовать свой источник модели.
Обновление:
Вот модель. Я использую многовариантное поведение . Я попытался использовать наборы проверки по умолчанию и зарегистрировать:
class User extends AppModel
{
var $actsAs = array('Multivalidatable');
var $hasOne = 'WishList';
var $hasMany = array(
'Address' => array(
'conditions' => array('NOT' => array('Address.deleted' => '1')),
'order' => array('Address.is_billing DESC')
)
);
var $validate = array(
'first_name' => array(
'rule' => 'notEmpty'
),
'last_name' => array(
'rule' => 'notEmpty'
),
'password' => array(
'passRule1' => array(
'rule' => 'notEmpty',
'message' => 'Please enter a password'
),
'passRule2' => array(
'rule' => array('identicalFieldValues', 'password'),
'message' => 'Passwords do not match'
)
),
'email' => array(
'emailRule1' => array(
'rule' => 'email',
'message' => 'You must specify a valid email address'
),
'emailRule3' => array(
'rule' => array('identicalFieldValues', 'email'),
'message' => 'Emails do not match'
)
)
);
var $validationSets = array(
'register' => array(
'first_name' => array(
'rule' => 'notEmpty'
),
'last_name' => array(
'rule' => 'notEmpty'
),
'password' => array(
'passRule1' => array(
'rule' => 'notEmpty',
'message' => 'Please enter a password'
),
'passRule2' => array(
'rule' => array('identicalFieldValues', 'password'),
'message' => 'Passwords do not match'
)
),
'email' => array(
'emailRule1' => array(
'rule' => 'email',
'message' => 'You must specify a valid email address'
),
'emailRule2' => array(
'rule' => 'isUnique',
'message' => 'That email address is already in our system'
),
'emailRule3' => array(
'rule' => array('identicalFieldValues', 'email'),
'message' => 'Emails do not match'
)
)
),
'billing' => array(
'email' => array(
'emailRule1' => array(
'rule' => 'email',
'message' => 'You must specify a valid email address'
),
'emailRule3' => array(
'rule' => array('identicalFieldValues', 'email'),
'message' => 'Emails do not match'
)
)
)
);
public function beforeValidate()
{
parent::beforeValidate();
// if password is empty reset from hash to empty string
if (isset($this->data['User']['password']) && $this->data['User']['password'] == Security::hash('', null, true)) {
$this->data['User']['password'] = '';
}
return true;
}
function identicalFieldValues($field=array(), $compare_field=null)
{
foreach ($field as $key => $value)
{
$v1 = $value;
$v2 = $this->data["Confirm"][$compare_field];
if ($compare_field == 'password' && $v2 != '')
{
$v2 = Security::hash($v2, null, true);
}
if ($v1 !== $v2)
{
return false;
}
else
{
continue;
}
}
return true;
}
}