0

我正在尝试使用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');

如果它只是一个字段,我可以用 aa if 条件来做,但会有更多字段,这样做似乎不切实际。而且由于它是一个链式方法,我不能通过放置中间 if 语句来破坏方法,如下所示:

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

有没有比为每组规则使用条件语句更好的方法来实现这一点?

4

1 回答 1

4

您正在调用对象本身,而不是调用的返回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');
}
于 2015-12-01T21:08:55.053 回答