は私が教義を呼び出すのSymfony 2でカスタム制約の検証を構築していないフィールドの近くに表示しますフォームの上部。カスタム制約の検証は、時にはSymfony2の
は、私はこのような注釈と私のカスタムバリデータを呼び出す:
/**
* @var string
*
* @ORM\Column(name="duree_p", type="decimal", precision=3, scale=2, nullable=true)
* @MyAssert\ExceedCharge
*/
private $dureeP;
奇妙なことは、いくつかのフィールドは、それはそれに次のエラーを表示する形式ですが、他人のためにそれが一番上にエラーが表示されます。
私はこの記事をStackOverflowで見ました:Custom constraint validation error doesn't display next to field in Symfony2しかし、それは私を助けませんでした。
"atPath()"オプションを試してみましたが、成功しませんでした。私は理解していない何
が、それは私が欲しい1のためのいくつかのフィールドといないために働くということです...
誰でも任意の手掛かりを持っていますか?
EDIT:私も違反メッセージが発生した場合、違反メッセージに関連するフィールドが「いいえので、任意の「は、エラー」クラスを持っていないことに気づいた
EDIT 2:ここで
は私の制約ロジックです:
:class ExceedChargeValidator extends ConstraintValidator
{
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function validate($value, Constraint $constraint)
{
dump($value); //DEBUG
dump($this->context); //DEBUG
//get id to perform search
$id = $this->context->getObject()->getCast()->getId();
$consomme = $this->em->getRepository('AppBundle:Intervention')->getConsomme($id);
$charge = $this->context->getObject()->getCast()->getCharge();
$prevu = $this->context->getObject()->getDureeP();
$realise = $this->context->getObject()->getDureeR();
dump($prevu); //DEBUG
dump($realise); //DEBUG
if($value != 0) {
$total = $value + $consomme;
if($total > $charge) {
$this->context->buildViolation($constraint->message1)
->setParameter('%string%', $value)
->addViolation();
dump($this->context->getPropertyPath());
}
dump($this); //DEBUG
}
dump($consomme);//DEBUG
dump($charge); //DEBUG
}
}
そして、ここでは私のエンティティのfielsの一部です210
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="date")
*/
private $date;
/**
* @var string
*
* @ORM\Column(name="duree_p", type="decimal", precision=3, scale=2, nullable=true)
* @MyAssert\ExceedCharge
*/
private $dureeP;
/**
* @var string
*
* @ORM\Column(name="duree_r", type="decimal", precision=3, scale=2, nullable=true)
* @Assert\GreaterThan(
* value = 0
*)
*/
private $dureeR;
フォームが簡単に管理バンドルここ
によって生成されているが、私は別のフィールドに同じ制約違反を添付する場合、私が得たものです。 "日付"フィールドで正常に動作することがわかりますが、 "dureeP"フィールドではメッセージが上部に表示されます
こんにちは:ここ
は、私がトラブルシューティングに使用バリです!ご清聴ありがとうございます。私は確かに "dureeP"という名前のフィールドと "date"という名前のフィールドを持っています。私は "日付"フィールドにアサートを添付しますが、その横に違反メッセージが表示されますが、 "dureeP"フィールドにアサートを添付すると、その上に違反メッセージが表示されます。なぜ私のフィールドの一部で動作し、私が欲しいものではないのかわかりません:/ – Lucien
もっとコードを貼り付けてください。 (フィールド "date"と "dureeP" +完全な制約ロジックがうまくいく) – Terenoth
私はあなたに詳細を教えてくれます。 – Lucien