\Nette\Forms\Container nejde nastavit jako validationScope
- chikeet
- Člen | 160
Zdravím,
mám ve formuláři \Kdyby\Forms\Replicator, u kterého vytvářím container
s tlačítkem pro přidání dalšího. Chci, aby mi tlačítko validovalo
aktuální container:
/** @var Container $animals */
$animals = $form->addDynamic('animals',
function (Container $container) {
# nějaké inputy a submity, žádné vnořené containery a podobně
$saveAndAdd = $container->addSubmit('saveAndAdd', 'poll.entryPoll.animals.saveAndAdd');
$saveAndAdd->setOption('containerAddButton', TRUE);
$saveAndAdd->setValidationScope($container);
}, 1);
Tracy mi ale hlásí:
Nette\InvalidArgumentException
Validation scope accepts only Nette\Forms\Container or Nette\Forms\IControl
instances.
Po drobné úpravě \Nette\Forms\Controls\SubmitButton::validationScope
public function setValidationScope(/*array*/$scope = NULL)
{
if ($scope === NULL || $scope === TRUE) {
$this->validationScope = NULL;
} else {
$this->validationScope = array();
foreach ($scope ?: array() as $name => $control) {
if (!$control instanceof Nette\Forms\Container && !$control instanceof Nette\Forms\IControl) {
throw new Nette\InvalidArgumentException('Validation scope accepts only Nette\Forms\Container or Nette\Forms\IControl instances. ' .
"Component '$name' is " . (is_object($control) ? 'instance of ' . get_class($control) : gettype($control)) . '.');
}
$this->validationScope[] = $control;
}
}
return $this;
}
dostanu:
Nette\InvalidArgumentException
Validation scope accepts only Nette\Forms\Container or Nette\Forms\IControl
instances. Component ‚onValidate‘ is NULL.
Dělám něco blbě, nebo je to bug v Nette? Mám verzi nette/application ~2.3@dev. Replicatorem to nejspíš nebude, na vyhledání onValidate mi IDE našlo jen Nette\Forms.
Editoval chikeet (17. 10. 2015 1:15)
- David Matějka
- Moderator | 6445
do setValidationScope musis poslat pole, tedy
setValidationScope([$container])