Demande d'aide sur symfony 2

tshilubilos
Invité n'ayant pas de compte PHPfrance

08 déc. 2014, 15:04

Bonjour à tous.

Je suis débutant en symfony je voudrais faire un upload d'une collection dans une page. Voici mon entité page :
<?php

namespace Liams\RestaurantBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Page
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Liams\RestaurantBundle\Entity\PageRepository")
 */
class Page
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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

    /**
     * @var string
     *
     * @ORM\Column(name="contenu", type="text")
     */
    private $contenu;
   
    /**
     * @var integer
     *
     * @ORM\Column(name="niveau", type="integer")
     */
    private $niveau;
   
    /**
    * @ORM\ManyToMany(targetEntity="Liams\RestaurantBundle\Entity\Formulaire", mappedBy="pages") 
    */
    private $formulaires;

    /**
    * @ORM\OneToMany(targetEntity="Liams\RestaurantBundle\Entity\Image", mappedBy="pages", cascade={"persist"})
    */
    private $images;
   
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set nomPage
     *
     * @param string $nomPage
     * @return Page
     */
    public function setNomPage($nomPage)
    {
        $this->nomPage = $nomPage;
   
        return $this;
    }

    /**
     * Get nomPage
     *
     * @return string
     */
    public function getNomPage()
    {
        return $this->nomPage;
    }

    /**
     * Set contenu
     *
     * @param string $contenu
     * @return Page
     */
    public function setContenu($contenu)
    {
        $this->contenu = $contenu;
   
        return $this;
    }

    /**
     * Get contenu
     *
     * @return string
     */
    public function getContenu()
    {
        return $this->contenu;
    }
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->formulaires = new \Doctrine\Common\Collections\ArrayCollection();
        $this->images = new \Doctrine\Common\Collections\ArrayCollection();  
    }
   
    /**
     * Add formulaires
     *
     * @param \Liams\RestaurantBundle\Entity\Formulaire $formulaires
     * @return Page
     */
    public function addFormulaire(\Liams\RestaurantBundle\Entity\Formulaire $formulaires)
    {
        $this->formulaires[] = $formulaires;
   
        return $this;
    }

    /**
     * Remove formulaires
     *
     * @param \Liams\RestaurantBundle\Entity\Formulaire $formulaires
     */
    public function removeFormulaire(\Liams\RestaurantBundle\Entity\Formulaire $formulaires)
    {
        $this->formulaires->removeElement($formulaires);
    }

    /**
     * Get formulaires
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getFormulaires()
    {
        return $this->formulaires;
    }

    /**
     * Add images
     *
     * @param \Liams\RestaurantBundle\Entity\Image $images
     * @return Page
     */
    public function addImage(\Liams\RestaurantBundle\Entity\Image $images)
    {
        $this->images[] = $images;
   
        return $this;
    }

    /**
     * Remove images
     *
     * @param \Liams\RestaurantBundle\Entity\Image $images
     */
    public function removeImage(\Liams\RestaurantBundle\Entity\Image $images)
    {
        $this->images->removeElement($images);
    }

    /**
     * Get images
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getImages()
    {
        return $this->images;
    }

    /**
     * Set niveau
     *
     * @param integer $niveau
     * @return Page
     */
    public function setNiveau($niveau)
    {
        $this->niveau = $niveau;
   
        return $this;
    }

    /**
     * Get niveau
     *
     * @return integer
     */
    public function getNiveau()
    {
        return $this->niveau;
    }  
}
Ma pageType :
<?php

namespace Liams\RestaurantBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class PageType extends AbstractType
{
        /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nomPage', 'text')
            ->add('contenu', 'textarea')
            ->add('images','collection', array(
                       'type'=>new ImageType(),
                       'allow_add'=>true,
                       'prototype'=>true,
                       'by_reference'=>false,
                       
                       
                   ))
            ->add('Enregistrer',      'submit', array('label'  => 'Créer'))
        ;
    }
   
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Liams\RestaurantBundle\Entity\Page',
         
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'liams_restaurantbundle_page';
    }
}
Entité Image :
<?php

namespace Liams\RestaurantBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Image
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Liams\RestaurantBundle\Entity\ImageRepository")
 */
class Image
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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

    /**
     * @var string
     *
     * @ORM\Column(name="alt", type="string", length=255)
     */
    private $alt;
   
    /**
    * @ORM\ManyToOne(targetEntity="Liams\RestaurantBundle\Entity\Page", inversedBy="images") 
    */
    private $pages;
   
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set url
     *
     * @param string $url
     * @return Image
     */
    public function setUrl($url)
    {
        $this->url = $url;
   
        return $this;
    }

    /**
     * Get url
     *
     * @return string
     */
    public function getUrl()
    {
        return $this->url;
    }

    /**
     * Set alt
     *
     * @param string $alt
     * @return Image
     */
    public function setAlt($alt)
    {
        $this->alt = $alt;
   
        return $this;
    }

    /**
     * Get alt
     *
     * @return string
     */
    public function getAlt()
    {
        return $this->alt;
    }
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->pages = new \Doctrine\Common\Collections\ArrayCollection();
    }
   
    /**
     * Add pages
     *
     * @param \Liams\RestaurantBundle\Entity\Page $pages
     * @return Image
     */
    public function addPage(\Liams\RestaurantBundle\Entity\Page $pages)
    {
        $this->pages[] = $pages;
   
        return $this;
    }

    /**
     * Remove pages
     *
     * @param \Liams\RestaurantBundle\Entity\Page $pages
     */
    public function removePage(\Liams\RestaurantBundle\Entity\Page $pages)
    {
        $this->pages->removeElement($pages);
    }

    /**
     * Get pages
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getPages()
    {
        return $this->pages;
    }

    /**
     * Set pages
     *
     * @param \Liams\RestaurantBundle\Entity\Page $pages
     * @return Image
     */
    public function setPages(\Liams\RestaurantBundle\Entity\Page $pages = null)
    {
        $this->pages = $pages;
   
        return $this;
    }
}
Imagetype :
<?php

namespace Liams\RestaurantBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;

class ImageType extends AbstractType
{
        /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('imag', 'file')
            //->add('alt', 'text')
        ;
    }
   
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Liams\RestaurantBundle\Entity\Image'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'liams_restaurantbundle_image';
    }
}
Dans mon controlleur, voici ma méthode.
/**
     * @Route("pageOnly", name="creePageSansFormulaire")
     * @Template()
     */
    public function creerPageOnlyAction(Request $request)
    {
        $page = new Page(); 
        $formPages = $this->get('form.factory')->create(new PageType(), $page);
        if ($formPages->handleRequest($request)->isValid()) {
         
                $em = $this->getDoctrine()->getManager();
                $em->persist($page);
                $em->flush();
                $request->getSession()->getFlashBag()->add('notice', 'Page bien crée.');
                // On redirige vers la page de visualisation des utilisateurs
                return $this->redirect($this->generateUrl('seeAllPage'));
                          
        }
        return $this->render('LiamsRestaurantBundle:Admin:admin.html.twig', array(
            'pageSansFormulaire' => $formPages->createView(),
        ));
      
    }
Mon template twig:

Code : Tout sélectionner

{# empty Twig template #} {% extends "LiamsRestaurantBundle::indexAdmin.html.twig" %} {% block content %} {{ form(pageSansFormulaire) }} {% endblock %}


Mon problème est que rien le formulaire type file ne s'affiche pas à l'écran. J'ai seulement les formulaires page et contenu et le bouton submit.

J'ai aussi Images qui s'affiche. Si quelqu'un peut m'eclairer.

merci d'avance.

Gregory
Invité n'ayant pas de compte PHPfrance

29 mai 2015, 13:34

Bonjour


Dans la création de ton form essayes ceci
$builder
->add('nomPage', 'text')
->add('contenu', 'textarea')
->add('images',new ImageType())
;