Я пытаюсь сделать форму, используя 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');
}
Есть ли лучший способ добиться этого, чем использование условных операторов для каждого набора правил?
Ты звонишь 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');
}
Других решений пока нет …