Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony-基于基础数据动态添加表单验证_Php_Symfony_Symfony2 Forms - Fatal编程技术网

Php Symfony-基于基础数据动态添加表单验证

Php Symfony-基于基础数据动态添加表单验证,php,symfony,symfony2-forms,Php,Symfony,Symfony2 Forms,我有一个实体类quote,它有一个字段amount,该字段应该小于控制器的newAction中设置的动态值 我正在formtype类中添加amount字段,其中的buildForm方法如下 public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('truckType') ->add('costPerTruck')

我有一个实体类
quote
,它有一个字段
amount
,该字段应该小于控制器的newAction中设置的动态值

我正在formtype类中添加amount字段,其中的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())),
                )));
            }
        }
    }
}
我的订户类别如下

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)),
    )));
然后,该字段将被约束

有人知道我做错了什么吗?或者其他实现这一目标的方法


谢谢

可能是因为该字段已创建。我建议你看一下第章,它可能对你来说是正确的。是的,我也认为调用
$form->remove('amount')$form->add
之前的code>应该可以做到这一点。(请注意,在这种情况下,自定义视图和模型转换器将丢失。为了重新分配它们,您必须为“金额”字段创建自定义FormType。)