2015-06-08 3 views
1

by + button a jquery function generates the fields,it is without model validationCakePHP 2.x несколько моделей (в комплекте поставляется отдельно) проверку

Как писать более сложные приложения я столкнулся с некоторыми проблемами. У меня есть 2 модели на одной странице. Пользователь и пользователь (это необязательно). Я должен использовать правила проверки модели (встроенные и костюмы: matchpassword). С человеком это не вызов, но с пользователем я не знаю, как это сделать. Потому что, если я реализую правила проверки в первом inload, у меня больше не будет дополнительного пользователя. Проверка Jquery не достаточно безопасна, я нуждаюсь в стороне сервера.

Groupscontroller:

public function add() { 
    if ($this->request->is('post')) { 
     $this->Group->create(); 
     if (

     $this->Group->save($this->request->data) 
     ) { 
      $this->Session->setFlash(__('The group has been saved.')); 

      $group_id=$this->Group->getInsertId(); 
      $person=$this->request->data['Person']; 
      $person['group_id']=$group_id; 
      $this->Group->Person->create(); 
      $this->Group->Person->save($person); 


      return $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The group could not be saved. Please, try again.')); 
     } 
    } 

файл представление Поскольку пользователь является необязательным я генерировать поля ввода от JQuery:

 <div class="groups form"> 
    <?php echo $this->Form->create('Group', array('class' => 'jquery-validation')); 

    echo $this->Html->script('http://code.jquery.com/jquery-1.11.3.min.js'); 


    ?> 
     <fieldset> 
      <legend><?php echo __('Add Group'); ?></legend> 
     <?php 
      echo $this->Form->input('name'); 
      echo $this->Form->input('comments'); 


     ?> 
     </fieldset> 


     <h2>People</h2> 
     <table id="mytable"> 
     <tr><th></th><th>Last Name</th><th>First Name</th><th>Email</th><th>Gender</th></tr> 
     <tr id="person0" style="display:none;"> 
      <td><?php echo $this->Form->button('&nbsp;-&nbsp;',array('type'=>'button','title'=>'Click Here to remove this person')); ?></td> 

      <td><?php echo $this->Form->input('unused.lastName',array('label'=>'','type'=>'text')); ?></td> 
      <td><?php echo $this->Form->input('unused.firstName',array('label'=>'','type'=>'text')); ?></td> 
      <td><?php echo $this->Form->input('unused.email',array('label'=>'','type'=>'text')); ?></td> 
      <td><?php echo $this->Form->input('unused.gender',array('label'=>'','type'=>'select','options'=>array('M'=>'M','F'=>'F','T'=>'T'))); ?></td> 


     </tr> 
     <tr id="trAdd"><td> <?php echo $this->Form->button('+',array('type'=>'button','title'=>'Click Here to add another person','onclick'=>'addPerson()')); ?> </td><td></td><td></td><td></td><td></td></tr> 
     </table> 

<div id="user-options"> 
    <?php 
    if (isset($this->data['User'])) { 


      echo $form->hidden("User.0.id"); 
      echo $form->input("User.0.username", array('label' => "Option " . (0))); 
echo $form->input("User.0.password", array('label' => "Option " . (0))); 

echo $form->input("User.$i.password_confirm", array('label' => "Option " . (0))); 
} 
    ?> 
    </div> 

, если я не хотел бы использовать: $this->Form->input('unused.firstName' и используя $this->Form->input('User.firstName' Типового правила проверки будут работать, но в этом случае я не могу добавить только человека из-за необходимых полей пользователя

Человек Modell:

class Person extends AppModel { 

    /** 
    * Use database config 
    * 
    * @var string 
    */ 
     public $useDbConfig = 'test'; 

    /** 
    * Display field 
    * 
    * @var string 
    */ 
     public $displayField = 'firstName'; 


     public $validate = array(
      'firstName' => array(
      'rule'=>'alphaNumeric', 
      'required' => true, 
      'message'=>'Not empty'), 
'password' => array(
      'notEmpty' => array(
       'rule' => array('notEmpty'), 
       'message' => 'Enter your Password', 
       //'allowEmpty' => false, 
       //'required' => false, 
       //'last' => false, // Stop validation after this rule 
       //'on' => 'create', // Limit validation to 'create' or 'update' operations 
      ), 

      'Match passwords'=>array(
       'rule'=>'matchPasswords', 
       'message'=>'passwords are not equal' 
       ) 

      ), 

      'password_confirm' => array(
      'notEmpty' => array(
       'rule' => array('notEmpty'), 
       'message' => 'Confirm your password', 
       'update' operations 
      ), 


     );][1] 

пользователя Модель:

'username' => array(
     'notEmpty' => array(
      'rule' => array('notEmpty'), 

     ), 
    ), 
    'password' => array(
     'notEmpty' => array(
      'rule' => array('notEmpty'), 
      'message' => 'Enter your Password', 

     ), 

     'Match passwords'=>array(
      'rule'=>'matchPasswords', 
      'message'=>'passwords are not equal' 
      ) 

     ), 

     'password_confirm' => array(
     'notEmpty' => array(

     ), 

Update1: Я думаю о bit.Maybe я должен написать правила валидации костюм: , где я могу утверждать, что if (поля Model1 и поля Model2 не пустые) ИЛИ поля Model1 не пустые, а поля Model2 пустые) return true

+0

это не происходит, потому что вы не даете правильный имя атрибута в поле. 'User.0.id' должно быть' User.id', 'User.0.username' должно быть' User.username', 'User.0.password' должно быть' User.password' и 'User. $ I .password_confirm' должно быть 'User.password_confirm' –

+0

вы правы с User.0.id означает User [0] [id], а остальное, но это не причина, по которой проверка модели (появляется *) – Andrewboy

ответ

0

Вы можете отключить правила перед проверкой, см. пример bel вл:

unset($this->User->validate['Match passwords']); 
if($this->User->save($this->request->data)){ 
    //do something. 
} 

Прикрепленный скриншот кажется, вы можете добавить несколько пользователей одновременно, если так User.0.password это правильно, в противном случае вам просто нужно User.password

+0

да сначала я использую несколько пользователей (с foreach, но после того, как я удалил и заменил .0.) Но если я отключил его перед сохранением, как будут проверены поля? – Andrewboy

+0

Я не говорю, чтобы отменить все правила, вам нужно отключить правила, которые являются дополнительными, так как ваша форма не имеет поля 'Match passwords', но правила проверки выполняются, и пока вы сохраняете, он ищет' Match passwords' и возврат с ошибкой проверки –

+0

Вы можете дополнительно отладить '$ this-> Model-> validationErrors' или установить [DebugKit] (https://github.com/cakephp/debug_kit) –

Смежные вопросы