2013-04-15 2 views
1

У меня есть две добавленные формы. Во-первых, я выбираю одного клиента, и для него я добавляю несколько имен доменов. Затем, когда я клик к следующему, я прибыл во вторую форму, в которой есть несколько доменных имен (я добавил раньше) в каждой строке с другими полями для каждого из них (registar, url и remark). Это выглядит так:Как получить несколько данных из формы?

toto.com | Прямой | www.toto.com | blablabla
toto.fr | Афник | www.toto.fr | bla
toto.net | Ганди | www.toto.net | blabla

Но когда я хочу восстановить эти данные в своем действии, чтобы добавить их в мою базу данных, я получаю только последнюю строку. Зачем ?

Моя форма:

<form action="<?php echo url_for('@add_domaines');?>" method="post"> 

    <?php echo $form->renderGlobalErrors() ?> 

    <table class="form_add_domaines"> 
     <thead> 
      <tr> 
       <th><?php echo $form['nom_domaine']->renderLabel()?></th> 
       <th><?php echo $form['compte_registar_id']->renderLabel() ?></th> 
       <th><?php echo $form['url']->renderLabel() ?></th> 
       <th><?php echo $form['remarque']->renderLabel() ?></th> 
      </tr> 
     </thead> 

     <tbody> 
      <?php 
      $domaines = explode("\n",$add_domaines); 
      for($i=0; $i<count($domaines); $i++) 
      {?> 
       <tr> 
        <td> 
         <?php 
         if(1==strcmp(' ', $domaines[$i])) 
         { 
          echo "<span style='color:red;'>"."<b>Warning, missing domain name.</b>"."</span>"; 
         } 
         else 
         { 
          echo $domaines[$i]; 
         } 
         ?> 
        </td> 

        <td> 

         <?php echo $form['compte_registar_id']->renderError() ?> 

         <?php echo $form['compte_registar_id'] ?> 
        </td> 


        <td> 

         <?php echo $form['url']->renderError() ?> 

         <?php echo $form['url'] ?> 
        </td> 

        <td> 

         <?php echo $form['remarque']->renderError() ?> 

         <?php echo $form['remarque'] ?> 
        </td>   
       </tr> 
      <?php 
      } 
      ?>   
     </tbody> 

     <tfoot> 
      <tr> 
       <td> 
        <?php echo link_to(__('Back', array(), 'sf_admin'), '@domaine_new') ?> 
       </td> 
       <td> 

        <?php echo $form->renderHiddenFields(false) ?> 
        <input type="submit" class="submit" value="Add" /> 
       </td> 
      </tr> 
     </tfoot> 
    </table> 
</form> 

Мои действия:

[...]  
$this->form = new AddDomainesForm(); 

$this->form->setDefault('client_id', $idClient); 
$this->form->setDefault('nom_domaine', $noms_domaine); 

if($request->isMethod('post')) 
      { 

       $name = $this->form->getName(); 

       $values = $request->getParameter($name); 
       $files = $request->getFiles($name); 

       $this->form->bind($values, $files); 

       if($this->form->isValid()) 
       { 
        print_r($values);break; 
        //$this->form->save(); 

        $this->getUser()->setFlash('notice', 'OK.'); 
        $this->redirect('@domaine'); 
       } 
      } 

print_r($values) возвращение только последняя строка моей формы

Array ([compte_registar_id] => 1 [URL] => www.toto.net [remarque] => blabla [nom_domaine] => toto.com toto.fr toto.net [client_id] => 17 [_csrf_token] => ...)

Спасибо!

+0

gimme the form HTML, plz –

+0

Я добавил, посмотрите пожалуйста :) – 2013-04-15 13:52:29

+0

Я думаю, вам нужно встроить 'AddDomainesForm' в другой (например, sfFrom). В документах объясняется [здесь] (http://symfony.com/legacy/doc/more-with-symfony/1_4/en/06-Advanced-Forms), как это сделать. – 1ed

ответ

0

Если несколько элементов формы имеют одно и то же имя, будет выполнено только последнее.

Вы видели, что ку могут отправлять массивы напрямую?

<inut type="text" name="foobarlist[]"> 
<inut type="text" name="foobarlist[]"> 
<inut type="text" name="foobarlist[]"> 

$ _GET ['foobarlist'] вернет массив с 3 элементами.

Кронштейны - это ключ.

+0

Спасибо за информацию, я не знал :) – 2013-05-21 15:30:38

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