我有一个小表单,只有一个文件字段来上传文档。我使用Symfony2.6和mongodb注释。我找到了一个"没有找到字段'文件'"例外。 我的文档类:
namespace My\Bundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @MongoDB\Document
*/
class ImportFile
{
[...]
/**
* @Assert\File(maxSize = "5M", mimeTypes = {"image/jpeg", "image/gif", "image/png"})
*/
protected $file;
[...]
/**
* @return $file
*/
public function getFile()
{
return $this->file;
}
/**
* @param $file
*/
public function setFile($file)
{
$this->file = $file;
}
(命名空间是正确的,我为帖子更改了它)
这是我的表单构建器的控制器:
$importFile = new ImportFile();
$form = $this->createFormBuilder($importFile)
->add('file')
->getForm();
应自动检测文件字段(如此处http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html所述),但它不起作用。如果我添加:
$form = $this->createFormBuilder($importFile)
->add('file','file')
->getForm();
它有效,但我不应该添加文件类型,因为它应该被自动检测。我做错了什么?
答案 0 :(得分:0)
我认为问题出在你的注释中。您只添加了一个断言但没有字段定义:
/**
* @Field(type="file")
* @Assert\File(maxSize = "5M", mimeTypes = {"image/jpeg", "image/gif", "image/png"})
*/
我希望它有所帮助。
答案 1 :(得分:0)
正如你在这里提到的那样:
我不希望在数据库中映射此字段
您应该在表单字段定义中使用映射属性:
mapped => false
因此,这应该可以解决您的问题(但请记住,提交后,文件属性的值不会与您的odm文档一起映射):
$form = $this->createFormBuilder($importFile)
->add('file', 'file', array(
'mapped' => false
))
->getForm();
更多信息:http://symfony.com/doc/current/reference/forms/types/text.html#mapped