Des classes PHP où on créée des objets pour les persister avec la base de donnée
Installer le bundle
composer require --dev doctrine/doctrine-fixtures-bundle
Rendre accessible le bundle pour la config de dev
// app/AppKernel.php
// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
// ...
if (in_array($this->getEnvironment(), array('dev', 'test'), true)) {
// ...
$bundles[] = new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle();
}
return $bundles;
}
// ...
}
Créer les éléments à insérer
// src/AppBundle/DataFixtures/ORM/Fixtures.php
namespace AppBundle\DataFixtures\ORM;
use AppBundle\Entity\Article;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;
class Fixtures extends Fixture
{
public function load(ObjectManager $manager)
{
// create 20 articles! Bam!
for ($i = 0; $i < 20; $i++) {
$date = new \DateTime("now");
$article = new Article();
$article->setName('article '.$i);
$article->setContent('bmamba');
$article->setCreated($date);
$article->setPublished($date);
$article->setAuthor('yoyoyo');
$manager->persist($article);
}
$manager->flush();
}
}
Insérer dans le base de donnée
php bin/console doctrine:fixtures:load
Pour éviter de purger la base
php bin/console doctrine:fixtures:load --append
// src/AppBundle/AppBundle\Entity\Article;
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="articles")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
private $category;
// src/AppBundle/AppBundle\Entity\Category;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\OneToMany(targetEntity="Article", mappedBy="category")
*/
private $articles;
// src/AppBundle/Controller/DefaultController.php
namespace AppBundle\Controller;
use AppBundle\Entity\Article;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class DefaultController extends Controller
{
public function newAction(Request $request)
{
$article = new Article();
$article->setName('Article vraiment Top !');
$article->setContent('Très intéressant!');
$article->setPublished(new \DateTime('tomorrow'));
$article->setCreated(new \DateTime('now'));
$article->setAuthor('Sam');
$form = $this->createFormBuilder($article)
->add('name', TextType::class)
->add('content', TextType::class)
->add('published', DateType::class)
->add('author', TextType::class)
->add('save', SubmitType::class, array('label' => 'Create Post'))
->getForm();
return $this->render('default/index.html.twig', array(
'form' => $form->createView()
));
}
}
Dans Twig
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
Pour insérer les résultats du formulaire dans la base
// src/AppBundle/Controller/DefaultController.php
namespace AppBundle\Controller;
use AppBundle\Entity\Article;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class DefaultController extends Controller
{
public function newAction(Request $request)
{
$article = new Article();
$article->setName('Article vraiment Top !');
$article->setContent('Très intéressant!');
$article->setPublished(new \DateTime('tomorrow'));
$article->setCreated(new \DateTime('now'));
$article->setAuthor('Sam');
$form = $this->createFormBuilder($article)
->add('name', TextType::class)
->add('content', TextType::class)
->add('published', DateType::class)
->add('author', TextType::class)
->add('save', SubmitType::class, array('label' => 'Create Post'))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$article = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($article);
$em->flush();
}
return $this->render('default/index.html.twig', array(
'form' => $form->createView()
));
}
}