Cakephp в одной форме, несколько моделей, не отображая одно сообщение о проверке модели
У меня есть регистрационная форма, и я создаю запись в таблицах User и Identity (у пользователя есть много тождеств)
форма выглядит так:
<?php echo $this->Form->create('User');?>
<fieldset>
<legend><?php __('Register'); ?></legend>
<?php
echo $this->Form->input('Identity.name');
echo $this->Form->input('Identity.surname');
echo $this->Form->input('User.username');
echo $this->Form->input('User.pass');
echo $this->Form->input('User.pass_confirm', array('type' => 'password'));
echo $this->Form->input('Identity.email');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
Я получаю все сообщения об ошибках проверки для полей User.*
, но Identity.*
отображаются без сообщений.
скриншот
правила проверки:
Идентичность:
var $validate = array(
'name' => array(
'notempty' => array(
'rule' => 'notempty',
'required' => true,
'message' => 'Your name is required.'
)
),
'surname' => array(
'notempty' => array(
'rule' => 'notempty',
'required' => true,
'message' => 'Your surname is required.'
)
),
'email' => array(
'validateEmail' => array(
'rule' => 'validateEmail',
'required' => true,
'message' => 'The email seems invalid.'
),
'notempty' => array(
'rule' => 'notempty',
'message' => 'You have to enter an email address.'
)
),
);
Пользователь:
var $validate = array(
'pass' => array(
'required' => array(
'rule' => array('custom','/^.*[0-9].*$/i'),
'message'=>'Password must contain numbers'),
'length' => array(
'rule' => array(
'minLength',8),
'message' => 'Password must be at least 8 characters long')
),
'pass_confirm' => array(
'required' => array(
'rule' => 'notempty',
'message' => 'You have to confirm the password'
),
'length' => array(
'rule' => 'validatePassword',
'message'=>'Your passwords don\'t match!' )
),
'username' => array(
'unique' => array(
'rule' => 'validateUniqueUsername',
'message' => 'Username is already taken, please choose a different one.'
),
'notempty' => array(
'rule' => 'notempty',
'message' => 'You have to choose a username.'
)
),
);
Ответы
Ответ 1
hasMany
поля модели должны быть как массив (в сочетании с родительской моделью), см. .0
, добавленные между именами полей
echo $this->Form->input('Identity.0.name');
echo $this->Form->input('Identity.0.surname');
...
echo $this->Form->input('Identity.0.email');
Ответ 2
Один из ответов, которые я нашел, был на этой странице по той же проблеме. Решением было добавить атрибут validate для saveAll
if($this->Member->saveAll($this->data, array('validate'=>'only'))){
//your custom save function
}