我有一个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。这也适用于不同的应用程序,所以我可以看到为什么它不会在这里工作。有谁知道可能导致这种情况的原因?
答案 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