Forms\Controls\BaseControl

- PavelJurasek
 - Člen | 39
 
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
 
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
 
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
 
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
 
Dalo by se „dědění“ považovat za odpověď? https://api.nette.org/…rol.php.html#57

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