php – Symfony验证

前端之家收集整理的这篇文章主要介绍了php – Symfony验证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个捆绑工作,用户使用表单创建一个“comision”,我试图检查用户是否还有“信用”.所以我创建了一个自定义验证器,用于查询过去的命令,如果信用不足则会抛出错误.

我的问题是,如果用户在“日期”字段中提交了一个格式错误的日期(即32-13-20122 24:05),Symfony仍会尝试运行我的自定义验证,我会得到各种错误(因为$comision – > getDate()为null且不是有效的DateTime对象.

我收到这个错误

clone method called on non-object

我还可以检查$comision-> getDate()的值是否是我的自定义验证器中的有效日期时间,但在我看来它应该没有必要,因为我在date属性添加了这个规则.

这是我的实体(简化)

/**
 * @MyValidation\TotalHours()
 */
class Comision
{

/**
 * @ORM\Column(type="datetime")
 * @Assert\DateTime()
 * @Assert\NotNull()
 */
protected $date;


/**
 * @ORM\Column(type="decimal",nullable=false,scale=1)
 * @Assert\NotBlank()
 */
protected $hours;

...

我的表格班……

class NewComisionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder,array $options)
    {
            $builder
                ->add('date',DateTimeType::class,array(
                'widget' => 'single_text','label' => 'Starting date and time','format' => 'dd/MM/yyyy HH:mm'
                ))
                ->add('hours',ChoiceType::class,array(
                    'label'=> 'How many hours','choices' => array(
                        '1:00' => 1,'1:30' => 1.5,'2:00' => 2,'2:30' => 2.5,'3:00' => 3
                    )
                ))
...

我的cutom验证器检查过去的命令,以确定用户是否还有“信用”

public function validate($comision,Constraint $constraint)
{
$from = clone $comision->getDate();
$from->modify('first day of this month');

$to = clone $comision->getDate();
$to->modify('last day of this month');

$credit = $this->em->getRepository("ComisionsBundle:Comision")->comisionsByDate($comision,$from,$to);

...
一种方法是按照 docs中的描述对约束进行分组.

这样您就可以定义两组约束,而第二组只有在第一组中的所有约束都有效时才会被验证.

关于您的用例,您可以将自定义约束放在与默认约束不同的组中,以确保您具有正确的$comision DateTime对象.

猜你在找的PHP相关文章