0

我想构建一个表单来存储一些数据。一个“Tarea”可以有多个“Material”,一个“Material”可以属于一个或多个“Tarea”。“Material”实体有图片属性,带图片上传。

我可以毫无问题地用图片创建一个新的“材料”。当我尝试创建一个新的“Tarea”时,问题就出现了,当我提交表单时,我收到“找不到文件”错误。

这是我的具有文件上传功能的 Material 实体:

/**
 * Gitek\HotelBundle\Entity\Material
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Gitek\HotelBundle\Entity\MaterialRepository")
 */
class Material
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $nombre
     *
     * @ORM\Column(name="nombre", type="string", length=100)
     */
    private $nombre;

    /**
     * @ORM\Column(type="string", nullable="true")
     *
     * @Assert\Image(maxSize = "500k")
     */
    protected $imagen;

    /**
     * @var datetime $created_at
     *
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $created_at;

    /**
     * @var datetime $updated_at
     *
     * @ORM\Column(name="updated_at", type="datetime")
     */
    private $updated_at;

    /**
    * @ORM\ManyToMany(targetEntity="Tarea", mappedBy="materiales")
    */
    protected $tareas;

    public function __construct()
    {
        $this->created_at = new \DateTime();
        $this->updated_at = new \DateTime();
    }

    public function __toString()
    {
        return $this->getNombre();
    }

    /**
     * Sube la foto de la incidencia copiándola en el directorio que se indica y
     * guardando en la entidad la ruta hasta la foto
     *
     * @param string $directorioDestino Ruta completa del directorio al que se sube la foto
     */
    public function subirImagen($directorioDestino)
    {
        if (null === $this->imagen) {
            return;
        }

        $nombreArchivoImagen = uniqid('material-').'-1.'.$this->imagen->guessExtension();

        $this->imagen->move($directorioDestino, $nombreArchivoImagen);

        $this->setImagen($nombreArchivoImagen);
    }

这是我的 Tarea 实体:

/**
 * Gitek\HotelBundle\Entity\Tarea
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Gitek\HotelBundle\Entity\TareaRepository")
 */
class Tarea
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $nombre
     *
     * @ORM\Column(name="nombre", type="string", length=100)
     */
    private $nombre;

    /**
     * @var datetime $created_at
     *
     * @ORM\Column(name="created_at", type="datetime")
     */
    private $created_at;

    /**
     * @var datetime $updated_at
     *
     * @ORM\Column(name="updated_at", type="datetime")
     */
    private $updated_at;

    /** @ORM\ManyToOne(targetEntity="Gitek\HotelBundle\Entity\Tipotarea") */
    protected $tipotarea;

    /**
     * @ORM\ManyToMany(targetEntity="Material", inversedBy="tareas")
     * @ORM\JoinTable(name="material_tarea",
     *      joinColumns={@ORM\JoinColumn(name="tarea_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="material_id", referencedColumnName="id")}
     * )
     */
    protected $materiales;

这是我的 MaterialType 表单类型:

<?php

namespace Gitek\BackendBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class MaterialType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('nombre')
            ->add('imagen')
        ;
    }

    public function getName()
    {
        return 'gitek_hotelbundle_materialtype';
    }
}

正如我所说,当我上传表单时,我收到“找不到文件”错误。好像验证失败了。

任何帮助或线索?

更新:如果在我的 TareaController 我评论验证行它可以正常工作。有什么线索吗?

4

1 回答 1

0

该表单不包括 Tarea 的字段,因此如果您在验证中要求它,它将失败。如果您不是一直需要它,您将需要设置验证组,以便验证器知道何时验证什么。

于 2012-05-11T15:54:47.410 回答