Bonjour,
Alors voilà je me tire les cheveux : je comprend pas ce que ce passe.
Mon bundle me sert à ajouter des article à un blog. Jusque la tout marchait bien et depuis peu impossible : J'ai un setter qui part en vrille ... Il ne me reconnait plus la variable $Author des que je clique sur enregistrer !
Voici mon controller :
(Dans le premier vardump il m'affiche bien ma variable, dans le second, il m'affiche null !)
public function addAction(Request $request)
{
$listImages = $this->getDoctrine()
->getManager()
->getRepository('AMImageManagerBundle:Image')
->getImagesActivites();
$article = new Article();
var_dump($article);
$form = $this->get('form.factory')->create(ArticleType::class, $article);
if ($request->isMethod('POST') && $form->handleRequest($request)->isValid()) {
var_dump($article);
$em = $this->getDoctrine()->getManager();
$em->persist($article);
$em->flush();
$request->getSession()->getFlashBag()->add('notice', 'Article bien enregistré.');
return $this->redirectToRoute('AM_Blog_view', array('id' => $article->getId()));
}
return $this->render('AMBlogBundle:Article:add.html.twig', array(
'form' => $form->createView(),
'listImages' => $listImages,
));
}
Mon entité ou je persist par default ma variable :
namespace AM\BlogBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Article
*
* @ORM\Table(name="article")
* @ORM\Entity(repositoryClass="AM\BlogBundle\Repository\ArticleRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Article
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
* @Assert\Length(min=10, minMessage="Le titre doit comporter 10 caractères minimum")
*/
private $title;
/**
* @var string
*
* @ORM\Column(name="author", type="string", length=255)
* @Assert\NotBlank()
*/
private $author;
/**
* @var string
*
* @ORM\Column(name="content", type="text")
* @Assert\NotBlank()
*/
private $content;
/**
* @var \DateTime
*
* @ORM\Column(name="date", type="datetime")
* @Assert\DateTime()
*/
private $date;
public function __construct()
{
$this->date = new \Datetime();
$this->author = 'MOI';
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set title
*
* @param string $title
*
* @return Article
*/
public function setTitle($title)
{
$this->title = $title;
return $this;
}
/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* Set author
*
* @param string $author
*
* @return Article
*/
public function setAuthor($author)
{
$this->author = $author;
return $this;
}
/**
* Get author
*
* @return string
*/
public function getAuthor()
{
return $this->author;
}
// ...
}
J'ai même essayé dans mon form :
->add('author', TextType::class,
array('label' => 'Auteur',
'data' => 'Re Moi'))
Dans ma vue je vois bien "Re Moi" mais des que je clique sur Enregistrer, l'input se vide et me dit de le remplir ...
Quelqu'un peut m'aider ? Merci d'avance.
Salut,
essaye de mettre $form->handleRequest($request); avant ton if.
et de mettre en 2ème condition dans ton if $form->isValid()
Si cela ne fait rien, est-il possible de voir ton ArticleType?
Tu as toujours la possibilité de faire un var_dump($form->getData()) pour voir ce qui sort de ton formulaire
Bonjour,
J'ai essay écela ne change rien du tout ...
Voici mon ArticleType entier :
<?php
namespace AM\BlogBundle\Form;
use AM\BlogBundle\Repository\CategoryRepository;
use AM\ImageManagerBundle\Repository\ImageRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class ArticleType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$pattern = 'Activites';
$builder
->add('date', DateType::class)
->add('title', TextType::class,
array('label' => 'Titre'))
->add('image', EntityType::class,
array(
'class' => 'AMImageManagerBundle:Image',
'choice_label' => 'alt',
'expanded' => true,
'multiple' => false,
'query_builder' => function(ImageRepository $repository) use($pattern){
return $repository->getLikeQueryBuilder($pattern);
}))
->add('content', TextareaType::class,
array (
'label' => 'Contenu',
'attr' => array(
'class' => 'tinymce',
'data-theme' => 'advanced',
)))
->add('author', TextType::class,
array('label' => 'Auteur',
'data' => 'Re Moi'))
->add('categories', EntityType::class,
array(
'class' => 'AMBlogBundle:Category',
'choice_label' => 'name',
'multiple' => true,
'expanded' => true,
'query_builder' => function(CategoryRepository $repository) use($pattern){
return $repository->getLikeQueryBuilder($pattern);
}))
->add('state', ChoiceType::class,
array(
'choices' => array(
'Enregistrée' => 'Enregistree',
'Publiée' => 'Publiee'),
'label' => 'Etat',
'expanded' => true,
'multiple' => false))
->add('distance', TextType::class)
->add('city', TextType::class,
array('label' => 'Ville'))
->add('save', SubmitType::class,
array('label' => 'Enregistrer'))
;
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AM\BlogBundle\Entity\Article'
));
}
}
Juste avant le If il dit cela :
object(AM\BlogBundle\Entity\Article)[425]
private 'id' => null
private 'title' => null
private 'author' => string 'MOI' (length=3)
private 'content' => null
private 'date' =>
object(DateTime)[424]
public 'date' => string '2016-11-01 08:27:25' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'Europe/Paris' (length=12)
private 'state' => null
dans mon if : (J'ai du enlever le NotBlank() sinon on ne rentre meme pas dedans)
object(AM\BlogBundle\Entity\Article)[425]
private 'id' => null
private 'title' => string 'Mon titre de 10 caracteres' (length=26)
private 'author' => null
private 'content' => string '<div class="clearfix"> </div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt quibusdam corporis ipsa adipisci inventore itaque. Repudiandae doloremque eaque expedita ab praesentium ducimus minima dicta molestiae! Quis, consequatur alias rerum temporibus!</div>
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-12">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt quibusdam corporis ipsa adipisci inventore itaque. Repudi'... (length=674)
private 'date' =>
object(DateTime)[916]
public 'date' => string '2016-11-01 00:00:00' (length=19)
public 'timezone_type' => int 3
public 'timezone' => string 'Europe/Paris' (length=12)
private 'state' => string 'Enregistree' (length=11)