En Yû, comment puis-je avoir une forme de boucles à travers un tableau d'objets?
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?
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!