Maximum function nesting level of ‚200‘ reached, aborting! – Datepicker
- MW
- Člen | 626
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
nemuzes pouzit ->addRule(Form::VALID, 'Zadejte Do !')
, to
kontroluje validitu prvku (a tedy i rules) a zacykli se to
- MW
- Člen | 626
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
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
@Aurielle je to asi vhodne jen u addConditionOn, zalozil jsem uz na to issue: https://github.com/…ms/issues/95