2011-01-12 11 views
15

Tôi có một hình thức đăng ký và tôi đang tạo ra một kỷ lục trong cả người dùng và nhận dạng bảng (một danh tính người dùng hasMany)cakephp một hình thức, nhiều mô hình, không hiển thị các thông điệp xác nhận một mô hình của

dạng trông giống như

này
<?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));?> 

Tôi nhận tất cả các thông báo lỗi xác thực cho các trường User.* nhưng các trường Identity.* được hiển thị mà không có thông báo.

screenshot

quy tắc xác nhận:

nhận dạng:

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: lĩnh vực

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

Trả lời

12

hasMany mô hình nên càng mảng (khi kết hợp với mô hình mẹ), xem .0 thêm vào giữa tên trường

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

Bạn đang làm '$ this-> User-> saveAll ($ data);' trong bộ điều khiển của bạn? – Ish

+0

Cảm ơn, bây giờ nó hoạt động tốt;] Tôi không biết tại sao nó đã làm những gì nó đã làm trong vài giây, nhưng nó ok ok;] – Elwhis

5

Một câu trả lời tôi tìm thấy là vào this page nhiều về cùng một vấn đề. Giải pháp là thêm thuộc tính xác thực để saveAll

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