Forms\Controls\BaseControl

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

Rád bych se zeptal, jak je možné, že pokud zde změním $this->setValue(…) na $this->value = …, dostanu do proměnné jinou hodnotu?

Přesněji se tak stává pokud mi fce

<?php
Nette\Utils\Arrays::get($this->getForm()->getHttpData(), $path, NULL);
?>

má vrátit pole objektů Nette\Http\FileUpload

PavelJurasek
Člen | 39
+
0
-

Form:

<?php
            $this->addUpload('photos[]', 'Photos:')
                    ->getControlPrototype()
                    ->multiple('multiple');
?>

BaseControl:

<?php
	public function loadHttpData()
	{
		$path = explode('[', strtr(str_replace(array('[]', ']'), '', $this->getHtmlName()), '.', '_'));
		// nove vrati pole objektu Nette\Http\FileUpload se spravnymi hodnotami
		$this->value = Nette\Utils\Arrays::get($this->getForm()->getHttpData(), $path, NULL);
		// misto puvodniho
		// vrati jedno Nette\Http\FileUpload s hodnotami null
//		$this->setValue(Nette\Utils\Arrays::get($this->getForm()->getHttpData(), $path, NULL));
	}
?>

Editoval PavelJurasek (29. 1. 2012 17:36)

Filip Procházka
Moderator | 4668
+
0
-

Nic takového Nette nedovoluje. V názvu komponenty nemůže být [, nebo ].

Toto se řeší Containerem, nebo nějakou chytrou komponentou.

PavelJurasek
Člen | 39
+
0
-

ano, ano, přepsal jsem si ten preg_match, který kontroluje název controlu abych to mohl vyzkoušet. Ale pořád mi nejde na rozum, jak je možné, že setterem, který nedělá nic jiného navíc než přímé deklarování, jsem byl připraven o data.

A to je další věc, proč nejde použít

<input name="files[]" type="file" multiple />

pro jednodušší upload souborů než replikací třeba 50 inputů.

Editoval PavelJurasek (29. 1. 2012 21:27)

uestla
Backer | 799
+
0
-

Dalo by se „dědění“ považovat za odpověď? https://api.nette.org/…rol.php.html#57

PavelJurasek
Člen | 39
+
0
-

Aha! Úplně jsem zapomněl, že to volá metodu potomka a ne rodiče. Díky za objasnění