カスタム制約バリデータで現在検証されているプロパティのエンティティにアクセスする方法はありますか?限り、私は見ることができる限り、私は価値(そして私がもちろん注入することができるサービス)にアクセスすることしかできません。カスタムsymfony2制約バリデーターの現在のエンティティにアクセス
答えて
私はそれも必要でした。 フル例の下に見つけてください:
エンティティを:
<?php
namespace AppBundle\Entity\MarketPlace;
use Doctrine\ORM\Mapping AS ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use AppBundle\Model\BaseCategoryClass as BaseCategory;
use AppBundle\Validator\Constraints as FMUAssert;
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\MarketPlace\ProductRepository")
* @Gedmo\Tree(type="nested")
* @FMUAssert\UnitConstraint()
*/
class Product extends BaseCategory
{
/**
* @ORM\Id
* @ORM\Column(type="integer", length=11)
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
}
制約:
<?php
namespace AppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class UnitConstraint extends Constraint
{
public $message = 'La chaîne "%string%" contient un caractère non autorisé : elle ne peut contenir que des lettres et des chiffres.';
public function validatedBy()
{
return 'unit_validator';
}
public function getTargets()
{
return self::CLASS_CONSTRAINT;
}
}
制約の検証:
<?php
namespace AppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class UnitConstraintValidator extends ConstraintValidator
{
public function validate($entity, Constraint $constraint)
{
exit(var_dump(get_class($entity)));
$this->context->addViolation($constraint->message, array('%string%' => $value));
}
}
、サービスとしての宣言:
services:
unit_validator:
class: %unit_validator.class%
tags:
- { name: validator.constraint_validator, alias: unit_validator }
私が入れたexit vardumpはエンティティクラス名を取得していますが、動作しています!あなたは、プロパティバリデータを持っている場合場合
はい、方法があります。 Class constraint validatorには、スコープ内のエンティティ全体があります。
ありがとうございました!ドキュメンテーションはやや不明瞭だったので、私はそれをキャッチしなかった。 –
@ EirikA.Johansen、例を挙げてください。 Symfonyの例で説明したのと同じことをしようとしていますが、成功しません。より詳細な例が完璧です。 –
が、あなたはまた、ExecutionContextを通じバリデータで検証済みのオブジェクトにアクセスすることができます
class SomeValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
$object = $this->context->getObject();
}
}
これはnullを返します。どんな考え? –
Eyとを、うまくそれはあなたが実体を検証する方法によって異なります。たとえば、Formを介してエンティティを検証しているため、ConstraintValidatorでエンティティを取得するには、コンテキストルートを取得してフォームからデータを取得するだけです。
/**
* @Annotation
*/
class ValidDnieValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
$user = $this->context->getRoot()->getData();
- 1. symfony2カスタムradio_widgetエンティティのアクセス
- 2. Symfony2:バリデーターの生のフォームデータにアクセス
- 3. カスタム制約の検証は、時にはSymfony2の
- 4. Spring 3.1カスタム制約バリデーター内でオートワイヤリングが機能しない
- 5. symfony2がエンティティの検証制約を取得
- 6. C++ cplexアクセス制約を追加する現在のソリューション
- 7. Symfony2 FOSユーザパスワードチェックコールバック制約
- 8. エンティティのサービスとしてのカスタム制約の検証
- 9. カスタムUITableCellViewの制約
- 10. Symfony2 - エンティティのリポジトリ機能へのアクセス
- 11. symfonyの2カスタム制約
- 12. PostgreSQLのカスタム非null制約
- 13. カスタムUICollectionViewLayoutと制約
- 14. safeAreaInsetsを現在の制約拡張に統合する方法
- 15. Symfony2エンティティフォームタイプのTexboxカスタム表現ですか?
- 16. symfony2のサービスパラメータ - 現在のリクエストを渡す
- 17. Play Framework [1.2.4]:エンティティの一意の制約
- 18. laravelのバリデーターに現在のインスタンスを渡す
- 19. エンティティのバリデータ制約を取得
- 20. 埋め込みエンティティのユニークな制約?
- 21. hibernateバリデーターのすべてのプロパティーにデフォルトの制約を設定するには
- 22. JSR 303カスタム制約オーバーライド
- 23. C#Entity Frameworkカスタム制約
- 24. Symfony2エンティティからの委託時に@ asset/notblankの制約を取り除く方法
- 25. Symfony2 - NativeQueryの結果キーからエンティティにアクセスする
- 26. angular2バリデーション:コントロールの現在のバリデーターを見つける
- 27. カスタム制約の検証とヌル
- 28. Symfony2バリデーター、NotBlankは許可するnull
- 29. symfony2 HTML5整数入力とバリデーター
- 30. エンティティFrmwkのPB:現在のコンテキスト内の「追加」エンティティの検索
素晴らしい!ちょっとしたことがあります:var_dumpの代わりに 'dump'を使うこともできます。それは非常にきれいにフォーマットされ、スタイリングされた出力を示しています。 – cezar