Установить условную проверку для цепных методов в формах Nette

Я пытаюсь сделать форму, используя Nette \ Forms где типы полей хранятся в базе данных. Таким образом, в зависимости от того, является ли поле электронным письмом или простым вводом текста; тип проверки будет отличаться следующим образом:

// For textbox
$form->addText($field['name'], $field['label'])
->setRequired('Enter your ' . $field['label']);

// For Email
$form->addText($field['name'], $field['label'])
->setRequired('Enter your email')
->addRule(FORM::EMAIL, 'Enter a valid email');

Если бы это было только одно поле, я мог бы сделать это с условием a if, но полей было бы намного больше, и это просто нецелесообразно. И так как это цепочечный метод, я не могу разбить методы, поместив промежуточный оператор if, как показано ниже:

$form->addText($field['name'], $field['label'])
->setRequired('Enter your email');
if ($field['type'] == ['email']) {
$form->addRule(FORM::EMAIL, 'Enter a valid email');
}

Есть ли лучший способ добиться этого, чем использование условных операторов для каждого набора правил?

0

Решение

Ты звонишь addRule() на $form сам объект, а не возвращаемое значение $form->addText() вызов.

$name = $form->addText($field['name'], $field['label'])
if ($field['type'] == ['email']) {
$name->setRequired('Enter your email')
->addRule(FORM::EMAIL, 'Enter a valid email');
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]