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.