cakephp one form, multiple models, not displaying one model's validation messages

11,971

Solution 1

hasMany model's fields should be as array (when combined with parent model), see .0 added between field names

echo $this->Form->input('Identity.0.name');
echo $this->Form->input('Identity.0.surname');
...
echo $this->Form->input('Identity.0.email');

Solution 2

One answer I found was on this page much about the same problem. The solution was to add the validate attribute to saveAll

if($this->Member->saveAll($this->data, array('validate'=>'only'))){
   //your custom save function
}
Share:
11,971

Related videos on Youtube

Elwhis
Author by

Elwhis

Updated on January 24, 2020

Comments

  • Elwhis
    Elwhis over 4 years

    I have a registration form and I am creating a record in both User and Identity tables (a user hasMany identities)

    the form looks like this

    <?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));?>
    

    I get all the validation error messages for User.* fields but Identity.* fields are shown without messages.

    screenshot

    validation rules:

    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.'
                )
            ),
        );
    

    User:

    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.'
                )
            ),
        );
    
  • Ish
    Ish over 13 years
    Are you doing $this->User->saveAll($data); in your controller?
  • Elwhis
    Elwhis over 13 years
    Thanks, now it works fine ;] I don't know why it did what it did for the few seconds, but it's ok finaly ;]
  • Soubhagya Kumar Barik
    Soubhagya Kumar Barik almost 6 years
    hello @ish hope you are doing well i have an issue can you please see this issue i have posted stackoverflow.com/questions/51120021/…

Related