Demande d'aide sur symfony 2
Posté : 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 :
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.
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.