2017-02-09 9 views
0

UbuntuでSymfony 3.2を使う16.04フォームの制約にエラーを追加するにはどうすればよいですか?

私はいくつかのフィールドを持つFormType.phpを作成しました。そのうちの1つは電話番号なので、数字だけを受け入れることができる制約を加えました。ここでは携帯電話のフォームその後

->add('authorPhone', NumberType::class, array('label' => 'Numéro de téléphone', 
       'required' => true, 
       'attr' => array(
        'class' => 'validate', 
        'id' => 'icon_telephone' 
       ), 
       'constraints' => array(new Regex("#^0[1-9]([-. ]?[0-9]{2}){4}$#")) 
      )) 

ためのコードは、私のコントローラで私は数字だけ

public function indexAction() 
    { 
     $form = $this->createForm(FormType::class); 
     $form->get('authorPhone')->addError(new FormError('error message')); 

     return $this->render('app/main/index.html.twig', array(
      'form' => $form->createView() 
     )); 
    } 

に充填する必要があることを伝えるためにエラーを追加しましたしかし、私は私のページを見たときにエラーメッセージは実際にフィールドを塗りつぶさずに表示されます。もちろん私はそれを望んでいません。

image

(あなたが電話番号を意味し、「ヌメロ・デ・電話」の下で見ることができます)

私は私の電話番号フィールドに数字をしたい、と文字がある場合は、エラーが表示されるべきですそれが正しいとは言えません。

答えて

1

symfonyでこのようなことをするための標準は、制約とエラーメッセージでエンティティを定義し、エンティティの制約に基づいて検証を自動的に処理するエンティティバインドフォームを作成することです。

しかし、何らかの理由で独立したフォームが必要な場合は、それを行うことができます。 addError()メソッドはフォームフィールドに「状態」エラーを追加するためのもので、フォームの作成直後にデフォルトでエラーが追加されます。それがエラーが常に見える理由です。

を更新:フォームフィールドにエラーメッセージを割り当てる

正しい方法は、(入力された値は、フィールドタイプに対応していない場合を示している)invalid_message性質によるものです。しかし、検証に使用する制約がある場合、エラーメッセージは制約バリデーターに従って設定する必要があります。つまり、あなたのケースでは、連想配列patternmessageのキーで設定する必要があります。

NumberTypeの代わりにTextTypeを使用すると、ダッシュを入力することができなくなり、先行する0を自動的に数値に整理することができます.-電話番号には悪い:

レビューする
->add('authorPhone', TextType::class, array(
    'label' => 'Numéro de téléphone', 
    'required' => true, 
    'attr' => array(
     'class' => 'validate', 
     'id' => 'icon_telephone' 
    ), 
    'constraints' => array(new Regex(
     array(
      'pattern' => '#^0[1-9]([-. ]?[0-9]{2}){4}$#', 
      'message' => 'Phone error message' 
     ) 
    )), 
)) 

そして最後 - コントローラに(フォームの宣言の後には)処理ルーチンフォーム送信することがあります。

$form->handleRequest($request); 

if ($form->isSubmitted() && $form->isValid()) { 
.... 

あなたはsymfonyのフォーム送信処理に多くを学ぶことができます。http://symfony.com/doc/current/forms.html#handling-form-submissions

フォームレンダリングはかなり簡単です。あなたが選択フィールドを一つずつをレンダリングしたい場合

{{ form_start(form) }} 
{{ form_widget(form) }} 
{{ form_end(form) }} 

または、::

{{ form_start(form) }} 
{{ form_row(form.authorPhone) }} 
{{ form_row(form.submit) }} 
{{ form_end(form) }} 

それ'LLは、ラベルやエラー

+0

を含む完全なフィールドをいただき、ありがとうございレンダリング全体のフォームをレンダリングするために小枝の構文あなたの助け、私はラインを追加しましたが、それを小枝で見るにはどうすればいいですか?コントローラに何かを追加してはいけませんか?または{{form_error(form)}}のようなもの?現時点では何もしないので、エラーメッセージなしで文字を追加することができます –

+0

フォームをどのようにレンダリングしますか? symfonyのフォームテンプレートは、エラーを自動的にレンダリングします。 config.ymlの設定はどうですか:twig:form_themes? –

+0

私はこれをコントローラに追加しました: ' $ form = $ this-> createForm(FormType :: class); リターンます$ this->レンダリング( 'アプリ/メイン/ index.html.twig'、配列( '形式' =>ます$ form-> CREATEVIEW()、私はフォームをレンダリングする方法 ' これ、および中私は例 –

関連する問題