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í