Notice „Array to string conversion“ při vykreslení prvku – PHP 5.4

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
grogy
Člen | 147
+
0
-

Zdravím,

vykresluji manuálně v komponentě formulářové prvky. Při vykreslení komponenty (input) se vyhodí notice – „Array to string conversion“.

Problémový kód:

{dump $form['filtrs']->getControls()}
{* -----------------------
	Nette\Iterators\InstanceFilter(1) ▼ {
		type private => "Nette\Forms\IControl" (20)
----------------------- *}

{foreach $form['filtrs']->getControls() as $filterControl}
	{dump $filterControl}
	{* -----------------------
		Nette\Forms\Controls\TextInput(16) ▼ {
			emptyValue protected => "",
			...
	----------------------- *}
	<th>{!$filterControl->getControl()}</th> {* ZDE JE PROBLEM *}
{/foreach}

Technologie:

  • PHP 5.4.11
  • Nette 2.0.8

Věděli byste, prosím, co s tím? Chování se mi zdá jako chybné, ale pro jistotu to chci napřed konzultovat.

vvoody
Člen | 910
+
0
-

Čo vidíš keď si dumpneš tú inkriminovanú hodnotu?

grogy
Člen | 147
+
0
-

výsledek:

{dump $filterControl->getControl()}

{* Nette\Utils\Html(4) ▼ {
   name private => "input" (5)
   isEmpty private => TRUE
   attrs => array(11) ►
   children protected => array(0)
} *}
redhead
Člen | 1313
+
0
-

Vrací se objekt třídy Html, myslím že není nutný ten vykřičník. (nevím ale jestli to vyřeší problém)

vvoody
Člen | 910
+
0
-

filtrs je zrejme form kontainer, môžeš ukázať jeho inicializáciu?

grogy
Člen | 147
+
0
-

redhead napsal(a):

Souhlas.

vvoody napsal(a):

public function createComponentForm()
  {
	  $form = new Nette\Application\UI\Form();
	  $form->setMethod('get');

	  $group = $form->addContainer('filtrs');
	  foreach ($this->filters as $k => $v) {
		  $value = "value";
		  $group->addText($k)->setAttribute('data-type', $v)->setValue($value);
	  }

	  $form->onSuccess[] = array($this, 'submitted');

	  return $form;
  }

Před aktualizací knihoven jsem vykresloval pomocí {$form['filtrs'][$column['atr']]->control}.

Edit:
Formulář předávám v render() konponenty pomocí $template->form = $this->getComponent('form');.

Editoval grogy (12. 2. 2013 13:57)

vvoody
Člen | 910
+
0
-

Stále nevidím nič zle, ešte keď tak ladenku.

stefi023
Člen | 71
+
0
-

Neni nahodou v tom

$group->addText($k)->setAttribute('data-type', $v)->setValue($value);

ten parametr $v nejake pole? a nemelo by se ten data atribut zapsat trochu jinak?

treba:

$group->addText($k)->setAttribute('data-type', json_encode($v))->setValue($value);

myslel jsem si totiz na tento (string) conversion, parkrat me take nachytal, ale mozna to neni tvuj problem :)

Editoval stefi023 (12. 2. 2013 17:16)

grogy
Člen | 147
+
0
-

stefi023 napsal(a):

Trefa. Díky moc.