找不到Symfony2映射文件

时间:2014-12-08 22:06:36

标签: mongodb file symfony annotations

我有一个小表单,只有一个文件字段来上传文档。我使用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();

它有效,但我不应该添加文件类型,因为它应该被自动检测。我做错了什么?

2 个答案:

答案 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