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.
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