Symfony - 基于底层数据动态添加表单验证

时间:2015-11-17 12:30:12

标签: php symfony symfony2-forms

我有一个实体类quote,其字段为amount,此字段应小于在控制器的newAction中设置的动态值。

我在formtype类中添加了amount字段,其中的My buildForm方法如下

public function buildForm(FormBuilderInterface $builder, array $options)
{   
    $builder
        ->add('truckType')
        ->add('costPerTruck')
        ->add('amount');

    $builder->addEventSubscriber(new AddQuoteDetailFieldSubscriber());
}

我的订阅者类如下

class AddQuoteDetailFieldSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(FormEvents::PRE_SET_DATA => 'preSetData');
    }

    public function preSetData(FormEvent $event)
    {
        $product = $event->getData();
        $form = $event->getForm();

        if (null !== $product && null !== $product->getLimit()) {

            if($product->getLimit() > 0){
                $form->add('amount',null, array(
                    'data' => $product->getLimit(),
                    'constraints' => array(
                       new LessThanOrEqual(array('value' => $product->getLimit())),
                )));
            }
        }
    }
}

问题是限制是正确设置并显示在金额字段中,但约束似乎没有做任何事情,并且让值大于限制值。

如果我在buildForm方法中添加限制,如

$builder
    ->add('truckType')
    ->add('costPerTruck')
    ->add('amount',null,array('constraints' => array(
       new LessThanOrEqual(array('value' => 10)),
    )));

然后这个领域受到限制。

用这个撞到我的头撞墙,有没有人知道我做错了什么?或任何其他方式来实现这一目标?

谢谢!

0 个答案:

没有答案