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

フィールドが 1 つだけの場合は、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 に答える