在 Nette 形式的链式方法上设置条件验证
Set conditional Validation on Chained Methods in Nette Forms
我正在尝试使用 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');
如果它只是一个字段,我可以用一个 if 条件来完成,但会有更多的字段,这样做似乎不切实际。而且由于它是一个链式方法,我不能通过放置如下中间 if 语句来破坏这些方法:
$form->addText($field['name'], $field['label'])
->setRequired('Enter your email');
if ($field['type'] == ['email']) {
$form->addRule(FORM::EMAIL, 'Enter a valid email');
}
有没有比对每组规则使用条件语句更好的方法来实现这一点?
您正在 $form
对象本身调用 addRule()
,而不是 $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');
}
我正在尝试使用 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');
如果它只是一个字段,我可以用一个 if 条件来完成,但会有更多的字段,这样做似乎不切实际。而且由于它是一个链式方法,我不能通过放置如下中间 if 语句来破坏这些方法:
$form->addText($field['name'], $field['label'])
->setRequired('Enter your email');
if ($field['type'] == ['email']) {
$form->addRule(FORM::EMAIL, 'Enter a valid email');
}
有没有比对每组规则使用条件语句更好的方法来实现这一点?
您正在 $form
对象本身调用 addRule()
,而不是 $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');
}