Skip to content

Instantly share code, notes, and snippets.

@tcoupin
Last active April 5, 2018 07:49
Show Gist options
  • Save tcoupin/835f4d7db9943795456e76a3ed8c6581 to your computer and use it in GitHub Desktop.
Save tcoupin/835f4d7db9943795456e76a3ed8c6581 to your computer and use it in GitHub Desktop.

General

Accéder à la requête

Ajouter un paramètre typé à l'action :

public function addAction(Request $request) {}

Générer une url

// On veut avoir l'URL de l'annonce d'id 5.
$url = $this->get('router')->generate(
            'oc_platform_view', // 1er argument : le nom de la route
            array('id' => 5)    // 2e argument : les valeurs des paramètres
        );
// Méthode courte
$url = $this->generateUrl('oc_platform_home');
<a href="{{ path('oc_platform_view', { 'id': advert_id }) }}">
    Lien vers l'annonce d'id {{ advert_id }}
</a>

Message flash

$session = $request->getSession();
$session->getFlashBag()->add('info', 'Annonce bien enregistrée');
{% for message in app.session.flashbag.get('info') %}
        <p>Message flash : {{ message }}</p>
{% endfor %}

Les services

Lister les services :

php bin/console debug:container

Préciser la class dans netbean :

/* @var $fb \Symfony\Component\Form\FormBuilder */
$fb = $this->get('form.factory')->createBuilder(...);

Formulaires

$advert = new Advert();
$formBuilder = $this->get('form.factory')->createBuilder(FormType::class, $advert);
$formBuilder
      ->add('date',      DateType::class)
      ->add('title',     TextType::class)
      ->add('content',   TextareaType::class)
      ->add('author',    TextType::class)
      ->add('published', CheckboxType::class)
      ->add('save',      SubmitType::class)
    ;
// À partir du formBuilder, on génère le formulaire
$form = $formBuilder->getForm();

Générer la vue html

return $this->render('OCPlatformBundle:Advert:add.html.twig', array( 'formobj' => $form->createView() ));

puis dans le twig {{ form(formobj) }}

Valider une requête

$form->handleRequest($request);
if ($form->isValid()) {...

Gestion des entités

Créer une entity

php bin/console doctrine:generate:entity

Annotation pour les liens

Dans l'entité propriétaire :

@ORM\ManyToOne(targetEntity="Advert",inversedBy="advertskills", cascade={"persist"}) //targetEntity = "OC\PlatformBundle\Entity\Advert
@ORM\JoinColumn(nullable=false)

Dans l'inverse:

@ORM\OneToMany(targetEntity="OC\PlatformBundle\Entity\Application", mappedBy="advert")

Commandes utiles

Fixtures pour remplir avec un jeu test

Exemple

<?php
// src/OC/PlatformBundle/DataFixtures/ORM/LoadCategory.php

namespace OC\PlatformBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use OC\PlatformBundle\Entity\Category;

class LoadCategory implements FixtureInterface
{
  // Dans l'argument de la méthode load, l'objet $manager est l'EntityManager
  public function load(ObjectManager $manager)
  {
    // Liste des noms de catégorie à ajouter
    $names = array(
      'Développement web',
      'Développement mobile',
      'Graphisme',
      'Intégration',
      'Réseau'
    );

    foreach ($names as $name) {
      // On crée la catégorie
      $category = new Category();
      $category->setName($name);

      // On la persiste
      $manager->persist($category);
    }

    // On déclenche l'enregistrement de toutes les catégories
    $manager->flush();
  }
}

Commande pour remplir

php bin/console doctrine:fixtures:load

En cas de soucis

absence du tag doctrine.fixture.orm nécessaire à la mise en place du service

https://stackoverflow.com/questions/47613979/symfony-3-4-0-could-not-find-any-fixture-services-to-load

Doc : https://symfony.com/doc/master/bundles/DoctrineFixturesBundle/index.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment