我在一个捆绑工作,用户使用表单创建一个“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); ...