2015-12-01 9 views
0

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

// 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'); 

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

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

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

ответ

3

Вы вызываете 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'); 
}