【问题标题】:Class constraint in trait not working特质中的类约束不起作用
【发布时间】:2023-03-09 20:45:02
【问题描述】:

我有一个简单的实体类型“城市”

class City
{

    use GeoTrait;

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

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=255)
     */
    private $title;

    ...

}

如您所见,它使用了一个 Trait,如下所示

use AppBundle\Validator\Constraint as AppConstraint;

/**
 * @AppConstraint\IsDuplicateLocation
 * @AppConstraint\IsLocation
 */
trait GeoTrait
{
         /**
    * @var string
    *
    * @ORM\Column(name="geoLat", type="decimal", nullable = true, precision=9, scale=6)
    */
   private $geoLat;
   /**
    * @var string
    *
    * @ORM\Column(name="geoLng", type="decimal", nullable = true, precision=9, scale=6)
    */
   private $geoLng;
}

现在,如果我创建一个新实体并尝试使用验证器服务对其进行验证,它似乎无法验证我的自定义类约束。

如果我向特征添加字段约束,则验证工作正常,但不适用于类约束。为什么这不起作用?

【问题讨论】:

    标签: symfony validation constraints traits


    【解决方案1】:

    Trait 不是类,因此您不能在自定义约束“getTargets()”方法中定位它。

    尝试将您的类约束添加到 City 类

    /**
    * @AppConstraint\IsDuplicateLocation
    * @AppConstraint\IsLocation
    */
    class City
    {
        ...
    }
    

    【讨论】:

    • 如果我创建一个带有表单的新实体,那就可以了。但是,如果我像本例中那样使用验证器服务:symfony.com/doc/current/… 没有错误(尽管应该有)
    • @casper 它应该可以工作。我刚刚测试了它。发布您的约束之一及其验证器代码,以便我们对其进行分析。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 2018-12-30
    • 2015-03-13
    • 2018-05-11
    • 2011-01-08
    相关资源
    最近更新 更多