Symfony Doctrine一对多验证

时间:2013-08-20 09:45:20

标签: validation symfony doctrine entity

我想通过与KitchenImage表的一对多关系来验证链接到实体的所有图像。

这是我的控制器功能:

public function addAction(Request $request)
    {
        // Check for POST
        if ($request->getMethod() == 'POST') {

            // Load Doctrine
            $em = $this->getDoctrine()->getManager();

            // Set Validator
            $validator = $this->get('validator');

            // Kitchen Details
            $kitchen = new Kitchen();
            $kitchen->setName($request->request->get('name'));
            $kitchen->setDescription($request->request->get('description'));
            $kitchen->setImage($request->files->get('main-image'));

            // Sub Images
            foreach ($request->files->get('sub-images') as $subimage)
            {
                $image = new KitchenImage();
                $image->setImage($subimage);
                $image->setKitchen($kitchen);
                $image->upload();
                $em->persist($image);
                $kitchen->addImage($image);
            }

            // Validation
            $errors = $validator->validate($kitchen);

            if (count($errors) > 0) {
                return new Response(print_r($errors, true));
            } 
            else {
                $kitchen->upload();
                $em->persist($kitchen);
                $em->flush();
                return new Response('The kitchen is valid! Yes!');
            }
        }

        return $this->render('PWDAdminBundle:Pages:add-kitchen.html.twig');
    }

厨房实体(删除了用于格式化的setter和getter):

/**
 * @ORM\Entity
 * @ORM\Table(name="kitchen")
 */
class Kitchen
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=100)
     * @Assert\NotBlank()
     */
    protected $name;

    /**
     * @ORM\Column(type="text")
     * @Assert\NotBlank()
     */
    protected $description;

    /**
     * @Assert\File(maxSize="6000000")
     * @Assert\NotNull()
     * @Assert\Image(
     *     minWidth = 800,
     *     maxWidth = 800,
     *     minHeight = 467,
     *     maxHeight = 467
     * )
     */
    protected $image;

    /**
     * @ORM\OneToMany(targetEntity="KitchenImage", mappedBy="kitchen")
     */
    protected $images;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    public $imagePath;

    public function __construct()
    {
        $this->images = new ArrayCollection();
    }

KitchenImage实体:

class KitchenImage
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     *
     * @Assert\File(maxSize="6000000")
     * @Assert\NotNull()
     * @Assert\Image(
     *     minWidth = 800,
     *     maxWidth = 800,
     *     minHeight = 467,
     *     maxHeight = 467
     * )
     */
    protected $image;

    /**
     * @ORM\ManyToOne(targetEntity="Kitchen", inversedBy="image")
     * @ORM\JoinColumn(name="kitchen_id", referencedColumnName="id")
     */
    protected $kitchen;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    public $path;

我在Kitchen Entity上尝试了以下内容:

/**
 * @ORM\OneToMany(targetEntity="KitchenImage", mappedBy="kitchen")
 * @Assert\All({
 *      @Assert\Valid
 * })
 */
protected $images;

但我收到错误消息:

"The constraint Valid cannot be nested inside constraint Symfony\Component\Validator\Constraints\All.

0 个答案:

没有答案