Quantcast
Channel: Grafikart | Derniers Sujets du forum
Viewing all articles
Browse latest Browse all 1542

Problème de champs vides

$
0
0
Bonjour,
Je suis entrain de réaliser un petit blog sous Symfony2 , j'ai un formulaire Article avec un autre formulaire imbriqué Image , je me suis retrouvé face à un problème au niveau de la base de données , ainsi lorsque je remplie les champs du formulaire , au niveau de la base tout est bon sauf les champs image de la table Articles et le champs article_id de la table Images .
Alors je sais pas si l'erreur est au niveau du code ou bien c'est un problème d'association entre les tables .

Le code de mon application :

<?php

namespace Blog\newsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;


/**
 * Article
 *
 * @ORM\Table(name="articles")
 * @ORM\Entity(repositoryClass="Blog\newsBundle\Entity\ArticleRepository")
 */
class Article
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="datePub", type="datetime")
     */
    private $datePub;

    /**
     * @var string
     *
     * @ORM\Column(name="contenue", type="text")
     */
    private $contenue;

    /**
     * @var string
     *
     * @ORM\Column(name="auteur", type="string", length=255)
     */
    private $auteur;
    /**
     * @ORM\Column(name="image" ,type="integer")
     * @ORM\OneToOne(targetEntity="Image" , mappedBy="article" )
     */
    private $image;

    /**
     * @var boolean
     *
     * @ORM\Column(name="publication", type="boolean")
     */
    private $publication;

    function __construct()
    {
        $this->publication = true;
        $this->datePub = new \DateTime();
    }


    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set titre
     *
     * @param string $titre
     * @return Article
     */
    public function setTitre($titre)
    {
        $this->titre = $titre;

        return $this;
    }

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

    /**
     * Set datePub
     *
     * @param \DateTime $datePub
     * @return Article
     */
    public function setDatePub($datePub)
    {
        $this->datePub = $datePub;

        return $this;
    }

    /**
     * Get datePub
     *
     * @return \DateTime
     */
    public function getDatePub()
    {
        return $this->datePub;
    }

    /**
     * Set contenue
     *
     * @param string $contenue
     * @return Article
     */
    public function setContenue($contenue)
    {
        $this->contenue = $contenue;

        return $this;
    }

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

    /**
     * Set auteur
     *
     * @param string $auteur
     * @return Article
     */
    public function setAuteur($auteur)
    {
        $this->auteur = $auteur;

        return $this;
    }

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

    /**
     * Set publication
     *
     * @param boolean $publication
     * @return Article
     */
    public function setPublication($publication)
    {
        $this->publication = $publication;

        return $this;
    }

    /**
     * Get publication
     *
     * @return boolean
     */
    public function getPublication()
    {
        return $this->publication;
    }

    /**
     * Set image
     *
     * @param integer $image
     * @return Article
     */
    public function setImage($image)
    {
        $this->image = $image;

        return $this;
    }

    /**
     * Get image
     *
     * @return integer
     */
    public function getImage()
    {
        return $this->image;
    }
}





<?php

namespace Blog\newsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

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

    /**
     *@ORM\OneToOne(targetEntity="Article" , inversedBy="image")
     *@ORM\JoinColumn(name="article_id" , referencedColumnName="id")
     */
    private $article;

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

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


    /**
     * 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;
    }

    /**
     * Set article
     *
     * @param \Blog\newsBundle\Entity\Article $article
     * @return Image
     */
    public function setArticle(\Blog\newsBundle\Entity\Article $article = null)
    {
        $this->article = $article;

        return $this;
    }

    /**
     * Get article
     *
     * @return \Blog\newsBundle\Entity\Article
     */
    public function getArticle()
    {
        return $this->article;
    }

    public function __toString()
    {
        return strval($this->id);
    }
}


<?php

namespace Blog\newsBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Blog\newsBundle\Form\ImageType;

class ArticleType extends AbstractType
{
        /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('titre','text')
            ->add('datePub','date')
            ->add('contenue','textarea')
            ->add('auteur','text')
            ->add('publication','checkbox',array('required'=>false))
            ->add('image',new ImageType(),array("by_reference" =>false))
            ->add('Submit','submit')
            ->add('Reset','reset')
        ;
    }
    
    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Blog\newsBundle\Entity\Article'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'blog_newsbundle_articletype';
    }
}

<?php

namespace Blog\newsBundle\Form;

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

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

    /**
     * @return string
     */
    public function getName()
    {
        return 'blog_newsbundle_imagetype';
    }
}




Le controlleur

<?php

namespace Blog\newsBundle\Controller;

use Blog\newsBundle\Entity\Article;
use Blog\newsBundle\Form\ArticleType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller
{
    public function indexAction($name)
    {
        return $this->render('BlognewsBundle:Default:index.html.twig', array('name' => $name));
    }

    public function ajouterAction(Request $request)
    {
        $article=new Article();

        $formBuilder=$this->createFormBuilder($article);

        $formBuilder->add('titre','text')
                    ->add('datePub','date')
                    ->add('auteur','text')
                    ->add('contenue','textarea')
                    ->add('publication','checkbox',array('required'=>false))
                    ->add('Envoyer','submit')
                    ->add('Cancel','reset');

        //A partir du formBuilder on genere le formulaire
        $form=$formBuilder->getForm();

        $request=$this->get('request');

        if($request->getMethod()=="POST")
        {
            $form->bind($request);

            if($form->isValid())
            {
               $em=$this->getDoctrine()->getManager();
                $em->persist($article);
                $em->flush();
                return $this->redirect($this->generateUrl("blognews_afficher",array("id"=>$article->getId())));
            }
        }

        return $this->render("BlognewsBundle:Default:ajouter.html.twig",array('form'=>$form->createView()));
    }

    public function afficherAction($id)
    {
        $em=$this->getDoctrine()->getRepository('Blog\newsBundle\Entity\Article');
        $article=$em->find($id);

        return $this->render('BlognewsBundle:Default:afficher.html.twig',array('article'=>$article));
    }


    public function ajouter2Action()
    {
        $article=new Article();
        $form=$this->createForm(new ArticleType(),$article);

        $request=$this->get('request');

        if($request->getMethod()=='POST')
        {
            $form->bind($request);
            if($form->isValid())
            {
                $em=$this->getDoctrine()->getManager();
                $em->persist($article);
                $em->persist($article->getImage());
                $em->flush();
                return $this->redirect($this->generateUrl('blognews_afficher',array('id'=>$article->getId())));
            }

        }
        return $this->render("BlognewsBundle:Default:ajouter.html.twig",array('form'=>$form->createView()));
    }
}



<form action="{{ path("blognews_ajouter2") }}" method="post" {{ form_enctype(form)}}>
    {{ form_errors(form) }}
    <div>
        {{ form_errors(form.titre) }}
        {{ form_label(form.titre,"Titre de l'article ") }}
        {{ form_widget(form.titre) }}
    </div>
    <div>
        {{ form_errors(form.contenue) }}
        {{ form_label(form.contenue,"Contenue de l'article")}}
        {{ form_widget(form.contenue)}}
    </div>

    {{ form_rest(form) }}
</form>


Viewing all articles
Browse latest Browse all 1542

Trending Articles