\Nette\Forms\Container nejde nastavit jako validationScope

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

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
+
+1
-

do setValidationScope musis poslat pole, tedy setValidationScope([$container])

chikeet
Člen | 160
+
0
-

@DavidMatějka Aha, mně to bylo divné, že se tam prochází komponenty uvnitř toho Containeru :-) Díky moc! Zrovna v tomhle případě by se celkem hodilo mít k tomu parametru anotaci, neb IDE mi tam vůbec nic užitečného nenapovědělo.