Symfony2在评估子表单时期望String

时间:2016-08-12 13:58:45

标签: php forms symfony doctrine

我有一个Comment实体,它与FileUpload实体具有ManyToOne关系,允许附加图像。以下是Comment实体中的关系:

/**
* @ORM\ManyToOne(targetEntity="CMSBundle\Entity\FileUpload", cascade={"persist"} )
* @ORM\JoinColumn(name="image_id", referencedColumnName="id")
*/
protected $image;

FileUpload实体只是将一些文件信息存储在数据库中,并有一个文件字段以启用表单中的上传。这是一个片段:

/**
 * @ORM\Entity
 * @ORM\Table(name="file_uploads")
 */
class FileUpload {

  /**
   * @ORM\Column(type="integer")
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  private $id;

  /**
   * @ORM\Column(type="string", length=20)
   */
  private $fileExtension;

  /**
   * @Assert\File(maxSize="6000000")
   */
  private $file;
  ...

我在评论表单中创建图像字段,如下所示:

$builder->add('image', new \CMSBundle\Form\FileUploadType(), 
    array('required'=>false));

这是我在FileUploadType中创建文件字段的地方:

$builder->add('file',null, array(
    'required'=>false,
    'label'=>false
));

这在我的一个应用程序中运行得非常好,但是现在我在不同的应用程序中使用它,并在创建注释时上传图像时收到以下错误消息:

Expected argument of type "string", "CMSBundle\Entity\FileUpload" given

Stack Trace
1. in vendor/symfony/symfony/src/Symfony/Component/Validator/Constraints/FileValidator.php at line 119
2. at FileValidator ->validate (object(FileUpload), object(File)) 
in vendor/symfony/symfony/src/Symfony/Component/Validator/Validator/RecursiveContextualValidator.php at line 862 

我已经尝试通过Symfony代码来查找问题并且FileValidator似乎附加到Comment中的image字段,这没有意义,因为我在创建表单时指定它是FileUploadType。这也适用于不同的应用程序,所以我可以看到为什么它不会在这里工作。有谁知道可能导致这种情况的原因?

2 个答案:

答案 0 :(得分:1)

我相信你的表单创建有误:

$builder->add('image', new \CMSBundle\Form\FileUploadType(), 
    array('required'=>false));

应该是

$builder->add('image', \CMSBundle\Form\FileUploadType::class, 
    array('required'=>false));

答案 1 :(得分:0)

发现问题。我有一个旧的validation.yml文件告诉评论中的图像字段它是一个文件。

CommentsBundle\Entity\Comment:
properties:
    image:
        - File:
            maxSize: 6000000