php - Symfony 验证

标签 php symfony validation

我在一个 bundle 中工作,用户使用表单创建一个“comision”,我正在尝试检查用户是否仍然有“credit”。因此,我创建了一个自定义验证器,用于查询过去的积分并在积分不足时抛出错误。

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

我收到这个错误:

clone method called on non-object

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

这是我的实体(简体)

/**
 * @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
                    )
                ))
...

我的自定义验证器会检查过去的交易以查找用户是否仍有“信用”

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 - Symfony 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46208695/

相关文章:

forms - symfony 2 表单类型集合,为模型中的每个新属性更改标签

javascript - 如果选中所有复选框,则启用提交按钮

java - 玩! 2.0 覆盖 "Invalid Value"消息

php - 将旧的 mysql_ 代码转换为 mysqli_ 查询

PHP opencart查询出数据

php - 无法获取我的数组所需的模板

asp.net-mvc - 地址字段的自定义 ASP.NET MVC 验证摘要

javascript - 从文本创建对象

javascript - symfony框架中的Ajax调用

php - symfony 4 中没有服务 FOSJsRoutingBundle