2017-04-24 13 views
0

フォームの送信後に画像の検証を処理するのに少し問題があります。そこに!私のフォームは、関数提出です:!私は試してみました提出後のSilverstripeフォームの画像検証に失敗しました

public function FormAjouterSubmit($data, $form) { 

    .... 

    Session::clear("PageAuteur.FormAjouterSubmit"); 

    $texte = "Veuillez remplir ce champ"; 

    if (!$data['ImageID']) { 
     Session::set("PageAuteur. FormAjouterSubmit", $data); 
     $form->addErrorMessage('Image', $texte, 'bad'); 
     return $this->redirectBack(); 
    } 

    .... 

} 

を$データ[「IMAGEID」]と$データ[「画像」]と、フォームが戻って戻って私のセッションデータを消去します。私は間違っているの?

+0

あなたは 'RequiredFields'バリデータを使用していない理由はありますか?通常、submit関数にバリデーションを組み込むのは悪い習慣です。 – bummzack

+0

はい。各フィールドの下にフィールドを指すための上向き矢印イメージを使用してカスタムエラーメッセージを作成することです。 – StefGuev

+0

これは、 'RequiredFields'がすでにやるべきことです...どのように見えるか(例えば上向きの矢印)はCSSを使って簡単に達成できます。さらなるカスタマイズが必要な場合は、 'RequiredFields'をサブクラス化するだけです。 – bummzack

答えて

1

RequiredFieldsを使用すると、必要なフォームフィールドを検証できます。 Formコンストラクタには5番目のパラメータがあり、必須のフィールドバリデータを指定できます。

例:

$form = Form::create(
    $this, 
    'FormAjouter', 
    $fields, 
    $actions, 
    RequiredFields::create(['Image']) 
); 

検証メッセージをカスタマイズする最も簡単な方法は、i18nを使用することです。あなたのデフォルトのロケールがフランス語であれば、クレートあなたはこのような何かに置くことができますmysite/lang/fr.ymlという名前のファイル:

Form: 
    FIELDISREQUIRED: 'Veuillez remplir le champ {name}' 

{name}は、あなたの実際のフィールドのタイトルに置き換えられます。もちろん、プレースホルダを省略することもできます。

フォームフィールドごとに異なるテキストが必要な場合は、カスタムエラーメッセージが必要な各フィールドにsetCustomValidationMessageを使用できます。

例:

$uploadField = FileField::create('Image'); 
$uploadField->setCustomValidationMessage('Please upload a file'); 
+0

ニース!私は決してsetCustomValidationMessageを使用しません。私は自分のコードを削除し、あなたのコードを使用します。どこでもすべてのコードを更新するのは素晴らしいことです!ありがとう@bummack。 – StefGuev

+0

これは異常ですが、カスタム検証メッセージはImageでは機能しますが、TextFieldなどの他のフィールドでは機能しません。 「このフィールドを記入してください」と書かれたHTML5形式のポップアップが表示されます。 – StefGuev

+0

@StefGuevこれは基本的なHTML5検証です。あなたのデータがサーバーに送信される前に起こる(純粋にブラウザで) – bummzack

関連する問題