【问题标题】:Symfony: Only one file entity and different validation rules for each association?Symfony:每个关联只有一个文件实体和不同的验证规则?
【发布时间】:2016-09-24 02:59:18
【问题描述】:

在我当前的项目中,我决定只创建一个可翻译的文件实体,并将其用于我拥有的所有图像/文档属性。对于翻译,我使用 Knp Doctrine Behaviors Translatable。所以这里是代码。

文件类:

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;
    }
}

可翻译文件类:

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;
    }
}

然后是如何在另一个实体(用户)中使用它来创建图像属性的示例:

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

没什么新鲜的。我只是按照 Symfony/Knp 文档,它工作正常。但是,现在我想在每次为不同的实体创建像 $image 这样的新属性时添加不同的验证规则。这里最好的策略是什么?

例如,每次我尝试在 $image 属性中添加与文件相关的验证规则时,它都会说找不到文件。

【问题讨论】:

    标签: validation symfony doctrine-orm constraints symfony-forms


    【解决方案1】:

    您可以为每个实体设置特定的验证器:

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

    【讨论】:

    • 感谢您的回答,但您能否提供有关您的解决方案的更多详细信息?对不起,但我没有理解它。我应该创建自己的验证器吗? symfony.com/doc/current/cookbook/validation/… 以及如何定义实体中的约束?
    【解决方案2】:

    对于那些有同样问题的人,我终于按照@sylvain 所说的做了,我创建了我的自定义验证器:

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

    这是一个很棒的教程,顺便说一句:

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

    它工作正常。但是,我仍然认为 @valid 约束应该有效,但我不明白为什么它没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 2011-10-25
      • 2011-04-30
      • 2018-12-07
      相关资源
      最近更新 更多