Zákaz vracení hodnot disabled prvků
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Lawondyss
- Člen | 106
Ahoj lidi,
chtěl jsem si do formulářů 2.0 přidat metodu, která by odfiltrovala hodnoty z formulářových prvků, které jsou disabled (inspirován formuláři 2.1).
Narazil jsem však na problém, kdy v presenteru sice prvku disabled změním na TRUE, ale při zpracování už je disabled zase na hodnotě nastavené při definici formuláře. Takže tak jako tak získám hodnotu, byť práznou.
Napadá někoho, jak to vyřešit?
- Patrik Votoček
- Člen | 2221
nejspíš to děláš (to nastavování disabled) v render metodě zkus to dělat v action :-)
- Lawondyss
- Člen | 106
Metoda pro vrácení hodnot v mém UserForm:
public function getValues($asArray = false)
{
$values = $asArray ? array() : new ArrayHash;
foreach ($this->getComponents() as $name => $control) {
if ($control instanceof IControl && !$control->isDisabled() && !($control instanceof SubmitButton)) {
$values[$name] = $control->getValue();
} elseif ($control instanceof Container) {
$values[$name] = $control->getValues($asArray);
}
}
// unset empty ID
if ($values['id'] === '') {
unset($values['id']);
}
// unset input for only check edit
if (isset($values['isEdit'])) {
unset($values['isEdit']);
}
return $values;
}
Vytvoření v presenteru:
public function createComponentUserForm()
{
return new UserForm;
}
Signál pro vykreslení formuláře:
public function handleEdit($id)
{
if (!isset($id)) {
$title = 'Add new';
} else {
$title = 'Edit existing';
$user = $this->usersRep->find($id);
$user->isEdit = true;
$this['userForm']->setDefaults($user);
$this['userForm']['login']->setDisabled();
}
$this->dialog()
->show($this['userForm'])
->title($title);
}