Demande d'aide sur symfony 2

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Demande d'aide sur symfony 2

Re: Demande d'aide sur symfony 2

par Gregory » 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())
;

Demande d'aide sur symfony 2

par tshilubilos » 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.