Colectare input-uri tabulare ================================ Uneori vrem sa colectam date de la utilizator in mod automat. Adica, utilizatorul poate introduce informatiile pentru mai multe instante de modele si sa le trimita pe toate o data. Denumim aceasta modalitate *input tabular* deoarece campurile input sunt de obicei prezentate intr-un tabel HTML. Pentru a folosi un input tabular, trebuie intai sa cream si sa populam un array de instante cu modelele respective, in functie ce trebuie sa facem, inserare sau actualizare de date. Apoi, trebuie sa extragem datele primite de la utilizator din variabila `$_POST` si sa asignam aceste date fiecarui model. O diferenta mica fata de asignarea in cazul unui singur model, este ca extragem datele de intrare folosind `$_POST['ModelClass'][$i]` in loc de `$_POST['ModelClass']`. ~~~ [php] public function actionBatchUpdate() { // extragem elementele de actualizat automat // presupunem ca fiecare element este al clasei modelului 'Item' $items=$this->getItemsToUpdate(); if(isset($_POST['Item'])) { $valid=true; foreach($items as $i=>$item) { if(isset($_POST['Item'][$i])) $item->attributes=$_POST['Item'][$i]; $valid=$valid && $item->validate(); } if($valid) // toate elementele sunt valide // ...se executa ceva aici } // afisam view-ul pentru colectarea input-ului tabular $this->render('batchUpdate',array('items'=>$items)); } ~~~ Avand action-ul pregatit, trebuie sa cream view-ul `batchUpdate` pentru a afisa campurile input intr-o tabela HTML. ~~~ [php]
| Name | Price | Count | Description |
|---|---|---|---|