Maximum function nesting level of ‚200‘ reached, aborting! – Datepicker

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

Zdravím a prosím o radu:
U odeslani tohoto formu me to hodí:

Maximum function nesting level of '200' reached, aborting!
protected function createComponentEvent() {
		$form = new Form;
		//$form->getElementPrototype()->class('ajax');

		$form->addGroup('Nová rezervace');

		$form->addDatePicker("from", "Od:", 15)
			->setRequired('Zadejte Od !')
			->setDefaultValue($this->getHttpRequest()->getQuery('calendar-for'));

		$form->addSelect('from2', 'Čas od:', $this->getHours());

		$form->addDatePicker('to', 'Do')
			->setRequired('Zadejte Do !')
			->addRule(Form::VALID, 'Zadejte Do !')
			->addCondition(Form::FILLED)
			->addRule(Form::RANGE, 'Entered date is not within allowed range.', array(
				new DateTime('-0 days 00:00'),
				new DateTime('+30 days 00:00')
			));
....

Config:

- Nextras\Forms\DI\FormsExtension

Třida Datepicker pak vypada takto

class DatePicker extends DateTimePickerPrototype
{
	/** @var string */
	protected $htmlFormat = self::W3C_DATE_FORMAT;

	/** @var string */
	protected $htmlType = 'date';


	protected function getDefaultParser()
	{
		return function($value) {
			if (!preg_match('#^(?P<dd>\d{1,2})[. -] *(?P<mm>\d{1,2})([. -] *(?P<yyyy>\d{4})?)?$#', $value, $matches)) {
				return NULL;
			}

			$dd = $matches['dd'];
			$mm = $matches['mm'];
			$yyyy = isset($matches['yyyy']) ? $matches['yyyy'] : date('Y');

			if (!checkdate($mm, $dd, $yyyy)) {
				return NULL;
			}

			$value = new Nette\Utils\DateTime;
			$value->setDate($yyyy, $mm, $dd);
			$value->setTime(0, 0, 0);
			return $value;
		};
	}

}

Pokud zakomentuju validacni pravdila u Datepickeru, je to ok.. Ladenka hodi jen ten nesting.
Co se me tam muze cyklit prosim? Resp se tam ma asi pouzit něco jinak, ale nedari se me na to prijit co..

Moc diky!

David Matějka
Moderator | 6445
+
+1
-

nemuzes pouzit ->addRule(Form::VALID, 'Zadejte Do !'), to kontroluje validitu prvku (a tedy i rules) a zacykli se to

MW
Člen | 615
+
0
-

No ja to tak mel a jelo to do aktualizace Nette.
Tak ted trochu nerozumim s cim to presne koliduje, prosim ?

Chapu tedy, ze

->addRule(Form::VALID, 'Zadejte Do !')
->addCondition(Form::FILLED)

jsou prakticky zbytecne když tam mam

->setRequired('Zadejte Do !')
->addRule(Form::RANGE, 'Entered date is not within allowed range.', array(
         new DateTime('-0 days 00:00'),
         new DateTime('+30 days 00:00')

Je to tak? Predtim to Nette asi kouslo.. ale když o tom tak premyslim :D

Editoval MW (30. 9. 2015 20:08)

Aurielle
Člen | 1281
+
+1
-

Je rozdíl mezi VALID a FILLED, později zmíněné v podstatě nahradila nová metoda setRequired() a taky jsi ho asi měl na mysli :) Jak říkal @DavidMatějka, VALID kontroluje validitu celého prvku a mimo velmi specifické případy (teď mě žádný nenapadá) bys ho nikdy neměl na formuláře navěšovat sám.

David Matějka
Moderator | 6445
+
+1
-

@Aurielle je to asi vhodne jen u addConditionOn, zalozil jsem uz na to issue: https://github.com/…ms/issues/95

MW
Člen | 615
+
0
-

Moc děkuji !!!