6

私の単純なデータ トランスフォーマーは、数値をエンティティに、またはその逆に変換します。公式ドキュメントの例とかなり似ています。

このメソッドは数値をエンティティに変換し、失敗すると説明メッセージとともに をreverseTransformスローします。TransformationFailedException

public function reverseTransform($number)
{
    if (!$number) {
        return null;
    }

    $issue = $this->om
        ->getRepository('AcmeTaskBundle:Issue')
        ->findOneBy(array('number' => $number))
    ;

    if (null === $issue) {
        throw new TransformationFailedException(sprintf(
            'An issue with number "%s" does not exist!',
            $number
        ));
    }

    return $issue;
}

ただし、上記のトランスフォーマーを使用するフォーム フィールドでは、「この値は無効です」という一般的なエラー メッセージが表示されます。例外テキスト (検証メッセージとして使用されることを期待していますが、そうではありません...) を変更しても、エラー メッセージは変更されません。

「この値は無効です」の代わりに例外テキストを表示するにはどうすればよいですか?

4

1 に答える 1

5

symfony はこの例外をキャッチし、独自のメッセージを設定するため (フィールドが正しくありません)、決してありません。このメッセージをカスタマイズする場合は、バリデーターをこのフィールドに設定する必要があります。

たぶん私は間違っていますが、何も見つかりませんでした。

例えば:

public function reverseTransform($number)
{
    if (!$number) {
        return null;
    }

    $issue = $this->om
        ->getRepository('AcmeTaskBundle:Issue')
        ->findOneBy(array('number' => $number))
    ;

    if (null === $issue) {
        // Nothig action
        //throw new TransformationFailedException(sprintf(
        //    'An issue with number "%s" does not exist!',
        //    $number
        //));
    }

    return $issue;
}

そして、フィールドに NotBlank/NotNull バリデーターを追加します。

UPD

また、フォームタイプにパラメータ「invalid_message」を設定できます。

例えば:

$builder
  ->add('you_field', 'text', array('invalid_message' => 'An issue number not found'))
  ->get('you_field')->addModelTransformer('....');
于 2013-11-03T16:42:18.593 に答える