2016-05-26 8 views
0

In meinem aktuellen Projekt habe ich beschlossen, nur eine übersetzbare Dateientität zu erstellen und sie für alle Bild-/Dokumenteigenschaften wiederzuverwenden, die ich habe. Für die Übersetzungen verwende ich Knp Doctrine Behaviors Translatable. Also hier ist der Code.Symfony: Nur eine Dateientität und verschiedene Validierungsregeln für jede Zuordnung?

Die Datei Klasse:

class File 
{ 
    use ORMBehaviors\Translatable\Translatable; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    public function __toString() 
    { 
     return (string)$this->id; 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 

Die übersetzbar Datei Klasse:

class FileTranslation 
{ 
    use ORMBehaviors\Translatable\Translation; 

    /** 
    * @ORM\Column(type="string", length=255, nullable=true) 
    */ 
    public $name; 

    /** 
    * @ORM\Column(type="string", length=255, nullable=true) 
    */ 
    public $path; 

    /** 
    * @Assert\File() 
    */ 
    private $file; 

    /* 
    * Non tracked parameter 
    */ 
    public $folder; 

    /** 
    * Set name. 
    * 
    * @param string $name 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 
    } 

    /** 
    * Get name. 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set path. 
    * 
    * @param string $path 
    */ 
    public function setPath($path) 
    { 
     $this->path = $path; 
    } 

    /** 
    * Get path. 
    * 
    * @return string 
    */ 
    public function getPath() 
    { 
     return $this->path; 
    } 

    /** 
    * Sets file. 
    * 
    * @param UploadedFile $file 
    */ 
    public function setFile(UploadedFile $file = null) 
    { 
     $this->file = $file; 
    } 

    /** 
    * Get file. 
    * 
    * @return UploadedFile 
    */ 
    public function getFile() 
    { 
     return $this->file; 
    } 

    /** 
    * Set folder 
    * 
    * @param string $folder 
    * 
    * @return File 
    */ 
    public function setFolder($folder) 
    { 
     $this->folder = $folder; 

     return $this; 
    } 

    /** 
    * Get folder 
    * 
    * @return File 
    */ 
    public function getFolder() 
    { 
     return $this->folder; 
    } 
} 

Und dann ein Beispiel, wie es in einem anderen Unternehmen (Benutzer) verwendet wird, ein Bild Eigenschaft zu erstellen:

class User 
{ 
    /** 
    * @ORM\OneToOne(targetEntity="File", cascade={"persist", "remove"}) 
    * @ORM\JoinColumn(name="image_id", referencedColumnName="id", nullable=true) 
    * @Assert\Valid() 
    */ 
    private $image; 
} 

Nichts neues. Ich bin einfach der Symfony/Knp Dokumentation gefolgt und es funktioniert gut. Nun möchte ich jedoch jedes Mal, wenn ich eine neue Eigenschaft wie $ image für verschiedene Entitäten erstelle, verschiedene Validierungsregeln hinzufügen. Was ist die beste Strategie hier?

Jedes Mal, wenn ich versuche, eine Validierungsregel für eine Datei in der $ image -Eigenschaft hinzuzufügen, wird beispielsweise angegeben, dass sie keine Datei finden kann.

Antwort

0

Sie spezielle Validator für jede Entität haben:

 /** 
    * vérification des constraintes 
    * @Assert\Callback 
    */ 
    public function validate(ExecutionContextInterface $context) 
    { 
     var_dump($this->image);// do your check here 
    } 
+0

danke für Ihre Antwort, aber können Sie mir mehr Details über Ihre Lösung geben? Entschuldigung, aber ich habe es nicht verschwiegen. Soll ich meinen eigenen Validator erstellen? http://symfony.com/doc/current/cookbook/validation/custom_constraint.html Und wie definiere ich die Einschränkungen in den Entitäten? – unadivadantan

0

Für diejenigen, die das gleiche Problem haben, ich habe endlich etwas @sylvain gesagt und ich meinen eigenen Prüfer erstellt:

http://symfony.com/doc/current/cookbook/validation/custom_constraint.html

Dies ist ein großes Tutorial, btw:

https://knpuniversity.com/screencast/question-answer-day/custom-validation-property-path

Es funktioniert gut. Ich denke jedoch immer noch, dass die @valid-Einschränkung funktioniert haben sollte und ich verstehe nicht, warum das nicht der Fall war.

Verwandte Themen