Gibt es eine Möglichkeit, auf die Entität der Eigenschaft zuzugreifen, die gerade in einem benutzerdefinierten Constraint-Validator validiert wird, und wenn ja, wie? Soweit ich sehen kann, habe ich nur Zugriff auf den Wert (und alle Dienste, die ich wählen könnte, natürlich zu injizieren).Zugriff auf aktuelle Entität im benutzerdefinierten Symfony2-Constraint-Validator
Antwort
Ich war auch in der Notwendigkeit. Hier finden Sie ein vollständiges Beispiel:
Entität:
<?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;
}
Die Einschränkung:
<?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;
}
}
Die Einschränkung Validator:
<?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));
}
}
Und die Erklärung als Dienstleistung:
services:
unit_validator:
class: %unit_validator.class%
tags:
- { name: validator.constraint_validator, alias: unit_validator }
Der Ausgang vardump, den ich gesetzt habe, holt mich den Entitätsklassennamen, es funktioniert!
Ja, es gibt einen Weg. Class constraint validator hat eine vollständige Entität im Umfang.
Vielen Dank! Die Dokumentation war etwas unklar, also habe ich das nicht zitiert. –
@ EirikA.Johansen, könnten Sie bitte ein Beispiel geben? Ich versuche dasselbe zu tun, wie im Symfony-Beispiel beschrieben, aber ohne Erfolg. Ein detaillierteres Beispiel wird perfekt sein. –
Im Fall, wenn Sie Eigentum Validator haben, können Sie auch Objekt in Validator durch ExecutionContext validierten Zugang:
class SomeValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
$object = $this->context->getObject();
}
}
Dies gibt null zurück. Irgendeine Idee warum? –
Ey, gut es hängt davon ab, wie Sie sich das Unternehmen zu validieren. Zum Beispiel validiere ich meine Entität über ein Formular, um die Entität im ConstraintValidator zu erhalten, muss ich nur den Kontextstamm abrufen und die Daten von meinem Formular abrufen:
/**
* @Annotation
*/
class ValidDnieValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
$user = $this->context->getRoot()->getData();
- 1. Zugriff auf aktuelle Systemzeitzone
- 2. Zugriff auf den Validator-Service im benutzerdefinierten Repository in Symfony
- 3. ipython: Zugriff auf aktuelle Figur()
- 4. Zugriff auf Entität über die Ansicht
- 5. Zugriff auf Produktinformationen im benutzerdefinierten Quellenmodell für das Produktattribut "dynamic"
- 6. ASP.NET Zugriff auf aktuelle Sitzung mit jQuery
- 7. Zugriff auf aktuelle Element in einem Datatemplate
- 8. Zugriff auf aktuelle Seite innerhalb eines Blocks innerhalb eines StreamFields
- 9. Symfony2 Entität wird nicht mit benutzerdefinierten Primärschlüssel
- 10. Zugriff auf Eigentum meiner benutzerdefinierten Dienst config
- 11. Zugriff auf andere Bereichsvariablen in benutzerdefinierten Vorlage
- 12. Zugriff auf FragmentManager in einer benutzerdefinierten Ansichtsklasse
- 13. Zugriff auf NSString-Eigenschaften einer Core Data-Entität
- 14. Zugriff auf Thread im Dienst
- 15. Zugriff auf Antwortdaten im Erfolgsrückruf
- 16. Zugriff auf das aktuelle Element in einem Selektor?
- 17. Zugriff auf aktuelle Anfrage in Express/Jade Ansicht
- 18. Wie erhalte ich das aktuelle Datum und die aktuelle Uhrzeit im Terminal und setze einen benutzerdefinierten Befehl im Terminal dafür?
- 19. Zugriff auf Benutzer über C#
- 20. Zugriff auf aktuelle Werte aus einer Chef-Datensammlung?
- 21. Zugriff auf die aktuelle Ansicht Klasseninstanz in Django Middleware
- 22. iPhone sdk - Zugriff auf aktuelle Songinformationen über eine App
- 23. Zugriff auf aktuelle Instanz von Page aus einer statischen Klasse
- 24. Zugriff auf das aktuelle Jenkins-Build in Groovy-Skript
- 25. Zugriff auf aktuelle Zeilendaten in Angular-Datatables mit Vorlagen?
- 26. Zugriff auf das aktuelle Changeset von CustomChange-Implementierungen
- 27. Gurke: Zugriff auf die aktuelle Controller-Instanz innerhalb der Schrittdefinitionen
- 28. Das aktuelle Konfigurationssystem unterstützt keine benutzerdefinierten Einstellungen
- 29. Zugriff auf vorherige Antwort im Repository mit DHC
- 30. Zugriff auf Mitglieder einer Art benutzerdefinierten Daten in Haskell
Großartig! Nur eine kleine Bemerkung: Sie könnten auch 'dump' anstelle von' var_dump' verwenden. Es zeigt die Ausgabe sehr schön formatiert und gestylt. – cezar