У меня есть регистрационная форма, и я создаю запись в таблицах 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.' ) ), );
hasMany
полей модели hasMany
должны быть как массивы (в сочетании с родительской моделью ), см. .0
добавленные между именами полей
echo $this->Form->input('Identity.0.name'); echo $this->Form->input('Identity.0.surname'); ... echo $this->Form->input('Identity.0.email');
Один из ответов, которые я нашел, был на этой странице очень похож на ту же проблему. Решением было добавить атрибут validate для saveAll
if($this->Member->saveAll($this->data, array('validate'=>'only'))){ //your custom save function }