En Yû, comment puis-je avoir une forme de boucles à travers un tableau d'objets?

StackOverflow https://stackoverflow.com/questions/3537908

  •  30-09-2019
  •  | 
  •  

Question

Je suis en train de créer un ActiveForm Yû que les valeurs de edits à partir d'une liste d'objets, présentés dans un tableau.

Les classes concernées:

class ResultForm extends CFormModel {

    /**
     * @var array[Result]
     */
    public $results; //Filled with an array of Result objects
}

class Result {  
    public $requiredArea;
}

Mon point de vue:

<% $form = $this->beginWidget('CActiveForm'); %>
<table>
   ....
   <% $rowCounter = 0; foreach($resultForm->results as $result): %>
       ...
       <tr>
           ....
           <td>
               <!-- This doesn't work -->
               <% $form->textField($resultForm,
                   "results[$rowCounter]->requiredArea") %>

               <!-- Just displaying the value works -->
               <%= $resultForm->results[$rowCounter]->requiredArea %>
           </td>
           ...
       </tr>
       <% $rowCounter++; endforeach; %>
</table>
<% $this->endWidget(); %>

Les champs de texte sont rendus et Yû ne se plaint pas, mais ils ne contiennent pas les valeurs appropriées.

Est-il possible que je puisse faire ce travail, ou est-il une meilleure approche pour itérer un tableau d'objets sous une forme?

Était-ce utile?

La solution

Je pense que vous voulez au lieu de ce que vous avez:

<% $form->textField($result,"[$rowCounter]requiredArea") %>

Qu'est-ce que vous voulez faire est de passer le modèle que vous itérez ($ result) au lieu du modèle parent / forme, et que vous voulez passer au nom de l'attribut de ce modèle dans le deuxième paramètre (avec le $ valeur / index de tableau i) au lieu de l'attribut courant.

Consultez cette page dans le guide Yii pour plus d'informations sur l'entrée sous forme de tableau: http://www.yiiframework.com/doc/guide/form.table

En outre, vérifiez que les paramètres sont censés être pour TextField (): http://www.yiiframework.com/doc/api/CHtml#activeTextField- détail

cheers!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top