Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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 如何使用关联验证实体?_Php_Forms_Symfony_Validation - Fatal编程技术网

Php 如何使用关联验证实体?

Php 如何使用关联验证实体?,php,forms,symfony,validation,Php,Forms,Symfony,Validation,我有表格课: ... public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('name', TextType::class); $builder->add('surname', TextType::class); $builder->add('address', IntegerType::class); // write cust

我有表格课

...
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('name', TextType::class); 
    $builder->add('surname', TextType::class);
    $builder->add('address', IntegerType::class); // write custom field type?
}
...
我使用它来验证客户实体,其中$address字段是关联:

...
/**
 * @ORM\OneToOne(targetEntity="Address")
 * @Assert\CustomAddress // write this custom validation constraint?
 */
private $address;
...
现在如何验证$address值?现在我得到了(我并不惊讶的是):

应为类型为“AppBundle\Entity\Address”的参数,并给定“string”


您需要为地址实体创建一个表单,例如:

use AppBundle\Entity\Address;
// ...

class AddressType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('address1', TextType::class); 
        $builder->add('city', TextType::class);
        // ...
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Address::class,
        ]);
    }
}
use AppBundle\Form\Type\AddressType;

// ...

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('name', TextType::class); 
    $builder->add('surname', TextType::class);
    $builder->add('address', AddressType::class);
}
然后更新您的
CustomerType
以使用该类,例如:

use AppBundle\Entity\Address;
// ...

class AddressType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('address1', TextType::class); 
        $builder->add('city', TextType::class);
        // ...
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Address::class,
        ]);
    }
}
use AppBundle\Form\Type\AddressType;

// ...

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('name', TextType::class); 
    $builder->add('surname', TextType::class);
    $builder->add('address', AddressType::class);
}

然后,您的地址实体将自动验证,而无需自定义验证约束。

Okey有效。所以现在我需要写转换器来从int转换到address实体?或者在$fomr->submit(…)之前获取它?我是对的?你不应该做这样的事情-你的关联被视为一个完整的实体,而不是传统的外键整数。所以你根本不需要数据转换器。谢谢你的回答。你是对的。不管怎样,我最终得到了一个例外:“复合表单在提交时需要一个数组或NULL”。我现在放弃了,我明天会尝试解决这个问题。我从来没有见过这样的错误:)如果你需要更多的帮助,请告诉我