SetDefaults na dynamický formulář

Rudolf247
Člen | 38
+
0
-

Zdravím,

Nějak jsem se za sekl na problému, kdy potřebuji použít setDefaults na formulář, který se vykresluje na základě záznamů v databázi.
Všechno funguje jak má, jen to setDefaults nemohu nějak rozchodit.

Děkuji za každou radu.
Tady je kód.

protected function createComponentUpdateWidgets()
 {
     $form = new Form();
     $widget = $form->addDynamic('widget', function (Container $position){
         $position->addInteger('position');
         $position->addSelect('widget_location', NULL, array('left_sidebar' => 'Levý sloupec', 'right_sidebar' => 'Pravý sidebar'));
         $position->addHidden('ide');

     }, 1);
     $form->addSubmit('update', 'Změnit')
     ->setValidationScope(false);
     $form->onSuccess[] = array($this, 'updateWidgets');
     return $form;
 }
<form n:name="updateWidgets">
	<table class="table">
		<thead>
           <tr>
             <th>Název</th>
             <th>Pořadí</th>
             <th>Umístění</th>
             <th class="text-right">Aktivní</th>
            </tr>
         </thead>
         <tbody id="active">
         {foreach $widgets as $key => $widget}
           <tr>
             <td class="pl-3">{$widget->name}</td>
             <td><input n:name="widget-$widget->id_widget-position" class="form-control" type="number" value=""></td>
             <td><select n:name="widget-$widget->id_widget-widget_location" class="form-control">
                     <option {if $widget->widget_location == 'left_sidebar'} selected="selected" {/if} value="left_sidebar">Levý sloupec</option>
                     <option {if $widget->widget_location == 'right_sidebar'} selected="selected" {/if} value="right_sidebar">Pravý sloupec</option>
                 </select></td>
			<td class="text-right pr-3"><input title="active" name="active-{$widget->id_widget}"
                                                       data-id="{$widget->id_widget}" type="checkbox" data-toggle="switch"
                                                       data-on-color="info" data-off-color="info" data-on-text=""
                                                       data-off-text="" {if $widget->active}checked{/if}></td>
          </tr>
            <ul n:if="$form->hasErrors()">
             <li n:foreach="$form->errors as $error">{$error}</li>
            </ul>
              <input n:name="widget-$widget->id_widget-ide" value="{$widget->id_widget}">
                {/foreach}
        </tbody>
     </table>
     <input n:name="update">
</form>
MajklNajt
Člen | 470
+
0
-

Ja používam niečo takéto:

$i = 0;
$defaults = [];
foreach($dataFromDb as $itemFromDb) {
	$defaults[$i] = [
		"position" => $itemFromDb->position,
		"widget_location" => $itemFromDb->widget_location
	];
	$i++;
}
$widget->setDefaults($defaults);