カテゴリー
diary

symfony2 Assert customizing messages

EntityのバリデーションのAssertで通らなかった時に指定するメッセージ文字列、これにplaceholderを使えないか検索してみたんだけどどうやらできない模様。時間がなくてソースコードまでは確認してない

例えば、こんな事をしたいと思った

[php]
/*
* @Assert\True(message = "未登録部門 {{ value }}")
*/
public function isValidDepartmentNumber() {
return (valid) ? true : false;
}
[/php]

もちろん、これは出来ないでのそのまま {{ value }} という文字列がエラーとして表示される

ウェブ上のフォームの場合は入力文字列(送信した値)が画面上に出ているだろうから、あえて何がバリデーションで失敗したかなんてエラー文字列に入れる必要はない。しかし今回はバッチ的な処理の中でEntityをいくつも作成してそれを検証する形だったので、まとめた処理のエラーを出す場合に単純なエラー原因だけでは何がどういった理由でエラーになったのか非常に分かりづらいという問題に陥った

こんな処理

[php]
for (someloop) {
// validate
$errors = $this->container->get(‘validator’)->validate($entity);
if (count($errors) > 0) {
// if error, stack error list
foreach ($errors as $error) {
$this->errors[] = $error->getMessage();
}
}
}
[/php]

結局ちょう場当たり的な対応をした

[php]
for (someloop) {
// validate
$errors = $this->container->get(‘validator’)->validate($entity);
if (count($errors) > 0) {
// if error, stack error list
foreach ($errors as $error) {
$_str = $error->getMessage();
// custom error messaging
$_str = preg_replace("/{{ value }}/", ‘ (‘.$entity->getDepartmentNumber().’)’, $_str);
$this->errors[] = $_str;
}
}
}
[/php]

symfony2関連のサンプルコードってまだまだ少ない感じがするなぁ