Symfony 2使用craue bundle上传文件

时间:2016-07-27 13:46:07

标签: php symfony collections upload flow

我使用bundle作为我的表单,我需要上传图片的帮助: 我有2个实体,扁平和flatpics。 问题是:我的观点中没有任何内容!没有错误,只是没有.. 谢谢你的帮助

我的实体公寓包含我的实体flatpics:

class Flat
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @Expose()
     * @Type("integer")
     * @Groups("flat_public")
     */
    private $id;

    /**
     * @var \Doctrine\Common\Collections\ArrayCollection $flatpics
     *
     * @ORM\OneToMany(targetEntity="***\FrontBundle\Entity\Flatpics", mappedBy="flat", cascade={"persist", "remove"}, orphanRemoval=true)
     * @ORM\JoinColumn(name="flatpics", referencedColumnName="id", onDelete="CASCADE")
     * @Expose()
     * @Type("ArrayCollection<***\FrontBundle\Entity\Flatpics>")
     * @Groups("flat_public")
     */
    private $flatpics;

    /**
     * @var \Doctrine\Common\Collections\ArrayCollection $room
     *
     * @ORM\OneToMany(targetEntity="***\FrontBundle\Entity\Room", mappedBy="flat", cascade={"persist", "remove"}, orphanRemoval=true)
     * @ORM\JoinColumn(name="room", referencedColumnName="id", onDelete="CASCADE")
     * @Expose()
     * @Type("ArrayCollection<***\FrontBundle\Entity\Room>")
     * @Groups("flat_public")
     */
    private $rooms;

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="Application\Sonata\UserBundle\Entity\User", inversedBy="flats", cascade={"persist"})
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
     * @Expose()
     * @Type("Application\Sonata\UserBundle\Entity\User")
     * @Groups("flat_public")
     */
    private $user;
etc...

我的实体flatpics:

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

    /**
     * @var string
     *
     * @ORM\Column(name="path", type="string", length=255, nullable=true)
     * @Expose()
     * @Type("string")
     * @Groups("flat_public")
     */
    private $path;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=true)
     */
    private $name;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created_at", type="datetime", nullable=true)
     */
    protected $createdAt;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated_at", type="datetime", nullable=true)
     */
    protected $updatedAt;

    /**
     * @var UploadedFile
     * @Assert\File(
     *     maxSize = "50000k",
     *     mimeTypes = {"image/png", "image/jpg", "image/jpeg", "image/gif"},
     * )
     */
    private $file;

    /**
     * @var ***\FrontBundle\Entity\Flat
     *
     * @ORM\ManyToOne(targetEntity="***\FrontBundle\Entity\Flat", inversedBy="flatpics")
     * @ORM\JoinColumn(name="flat_id", referencedColumnName="id")
     */
    private $flat;
etc...

FormType上传:

class UploadForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        switch ($options['flow_step']) {
            case 1:
        $builder
                ->add('flatpics', 'collection', array('type' => new FlatpicsType(),'allow_add' => true,
                        'by_reference' => false,
                        'allow_delete' => true,
                        'prototype' => true, 'label' => 'Images'
                    ));              
                break;
        }
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => '***\FrontBundle\Entity\Flat',
        ));
    }

    public function getName()
    {
        return '***_frontbundle_flat_upload';
    }
}

FormType Flatpics:

class FlatpicsType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('file', 'file', array(
                'constraints' => array(
                    new Assert\File(array(
                        'maxSize' => '50000k',
                        'mimeTypes' => array(
                            'image/png',
                            'image/jpeg',
                            'image/gif'
                        ),
                    ))
                ),
                'required' => false
            ))
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => '***\FrontBundle\Entity\Flatpics'
        ));
    }

    public function getName()
    {
        return '***_frontbundle_flatpics';
    }
}

FlatController:

class FlatController extends Controller
{

    /**
    * @Route("/flat/flatupload/", name="_FormFlow_Upload")
    * @Template
    */
    public function flatUploadAction() 
    {       
    return $this->processFlow(new Flat(), $this->getUploadPicsFlow(true));         
    }                  

    protected function getUploadPicsFlow($dynamicStepNavigationEnabled) {
        $flow = $this->get('***.form.flow.upload');
        $flow->setAllowDynamicStepNavigation($dynamicStepNavigationEnabled);
        // separate data per mode
        if ($dynamicStepNavigationEnabled) {
            $flow->setStepDataKey($flow->getStepDataKey() . '_dsn');
        }
        return $flow;
    }


    protected function processFlow($formData, FormFlowInterface $flow) 
    {
        $flow->bind($formData);
        $form = $flow->createForm();
        if ($flow->isValid($form)) {
            $flow->saveCurrentStepData($form);
            if ($flow->nextStep()) {
                // create form for next step
                $form = $flow->createForm();
            } else {
                // flow finished
                // ...
                $flow->reset();
                                $em = $this->getDoctrine()->getEntityManager();
                                $em->persist($formData);
                                $em->flush();
                return $this->redirectToRoute('***_front_flat_flatupload', array(), 301);
            }
        }
        return array(
            'form' => $form->createView(),
            'flow' => $flow,
            'formData' => $formData,
        );
    }


}

0 个答案:

没有答案
相关问题