Symfony 2 : développez votre site avec un framework PHP

symfony logo

Voici un prise de note rapide que j’ai pu réaliser durant la lecture du livre « Développez votre site web avec le framework SYMFONY 2 » (de Alexandre BACCO). Le livre est disponible à l’achat ou accessible gratuitement en ligne. Symfony 2 est un framework très puissant permettant de réaliser des sites robustes (structure MVC, template twig, ligne de commande, …), bref une solution à adopter au plus vite sur vos futurs projets.
(Attention le temps d’apprentissage reste assez long sur ce type de framework).

Prise de note sur Symfony 2 :

CONTROLLER : $this->getRequest() equivalent $this->get(‘request’);

 

RECUP VAR DE L’URL (http://URL/index.php?tag=5)

$request = $this->getRequest();

$tag = $request->query->get(‘tag’);

LISTE : getRequest()

Variables URL ($_GET) : $request->query

Variables Form ($_POST) : $request->request

Variables Cookie ($_COOKIE) : $request->cookies

Variables Serveur ($_SERVER) : $request->server

Variables d’Entete ($_SERVER[‘HTTP_*’] : $request->headers

Paramètres de route : $request->attributes

 

if( $request->getMethod() == ‘POST’ ){ // Un formulaire a été envoyé, on peut le traiter ici }

if( $resquest->isXmlHttpRequest() ){ // C’est une requete AJAX, retournons du JSON, par exemple }

 

Voir plus : http://api.symfony.com/2.2/Symfony/Component/HttpFoundation/Request.html

———————————————————————————————————————————————————

CONTROLLER : redirection

return $this->redirect( $this->generateUrl( ‘sdzblog_accueil’, array(‘page’=>2) ) );

———————————————————————————————————————————————————

CONTROLLER : render (rendre une vue)

return $this->render( ‘SdzBlogBundle:Blog:voir.html.twig’, array(« article_id »=> »18 ») );

———————————————————————————————————————————————————

CONTROLLER : Response

return new Response(« Bla bla »);

return new Response(« Afficher l’article portant l’id : « .$id);

———————————————————————————————————————————————————

CONTROLLER : envoyer email

// ENVOYER EMAIL : configurer compte d’envoi dans app/config/parameters.yml

// mailer_transport: smtp

// mailer_host: smtp.votre-serveur.fr

// mailer_user: identifiant

// mailer_password: mdp

$mailer = $this->get(‘mailer’);

$message = \Swift_Message::newInstance()

->setSubject(‘Mon sujet ici’)

->setFrom(‘moi@eewee.fr’)

->setTo(‘contact@eewee.fr’)

->setBody(‘corps du message’);

$mailer->send($message);

return new Response(‘Email bien envoyé’);

———————————————————————————————————————————————————

CONTROLLER : récupérer le contenu d’un template

$this->get(‘templating’)->render(‘SdzBlogBundle:Blog:voir.html.twig’);

———————————————————————————————————————————————————

CONTROLLER : savoir si un template existe

$this->get(‘templating’)->exists(‘SdzBlogBundle:Blog:inexistant’);

———————————————————————————————————————————————————

CONTROLLER : les services

REQUEST :

$this->get(‘request’) (équivalent à $this->getRequest(), qui est un raccourci vers le service)

 

SESSION

Ex :

$session = $this->get(‘session’);

// GET : Recuperation de donnee

$user_id = $session->get(‘user_id’);

// SET : maj

$session->set(‘user_id’, 55);

Ex :

$session = $this->getRequest()->getSession();

———————————————————————————————————————————————————

CONTROLLER : Message Flash

// init

$this->get(‘session’)->getFlashBag()->add(‘info’, ‘message 1 ici’);

 

VIEW :

// rendu

<p>

{# On affiche tous les messages flash dont le nom est « info » #}

{% for message in app.session.flashbag.get(‘info’) %}

<p>{{ message }}</p>

{% endfor %}

</p>

———————————————————————————————————————————————————

VIEW : liens

<a href='{{ path( ‘sdzblog_voir’, { ‘id’: article_id } ) }}’>Lien article id={{ article_id }} (valeur relative)</a>

<a href='{{ url( ‘sdzblog_voir’, { ‘id’: article_id } ) }}’>Lien article id={{ article_id }} (valeur absolue)</a>

———————————————————————————————————————————————————

CONTROLLER : generateUrl

return $this->redirect( $this->generateUrl(‘sdzblog_voir’, array(« id »=>5)) );

———————————————————————————————————————————————————

SERVICE :

Il est possible de créer ses propres « services », pouvant etre utiliser plusieurs fois sur votre site.

———————————————————————————————————————————————————

DECLENCHER UNE ERREUR 404 :

// on déclenche une exception NotFoundHttpException

// cela va afficher la page d’erreur 404

throw $this->createNotFoundException(‘Page inexistante (page=’.$page.’)’);

———————————————————————————————————————————————————

ENVOYER EMAIL A PARTIR D’UN TEMPLATE TXT : (p89)

$contenu = $this->renderView(‘SdzBlogBundle:Blog:email.txt.twig’, array(‘var1’=>$var1, ‘var2’=>$var2));

mail(‘email@email.fr‘, ‘inscription OK’, $contenu);

———————————————————————————————————————————————————

TWIG : equivalence twig / PHP

(p90)

{{ pseudo }} égal à <?php echo $pseudo; ?>

{{ user[‘id’] }} égal à <?php echo $user[‘id’]; ?>

{{ user.id }} égal à <?php echo $user->getId(); ?>

{{ pseudo|upper }} égal à <?php echo strtoupper( $pseudo ); ?>

{{ news.texte|striptags|title }} égal à <?php echo ucwords( strip_tags( $news->getTexte() ) ); ?>

{{ date|date(‘d/m/Y’) }} égal à <?php echo $date->format(‘d-m-Y’); ?>

{{ nom ~  »  » ~ prenom }} égal à <?php echo $nom. » « .$prenom; ?>

(p91)

{{ var|upper }} => mettre la variable $var en majuscule

{{ var|striptags }} => supprime toutes les balises XML

{{ date|date(‘d-m-Y’) }} ou {{ « now »|date(‘d-m-Y’) }}

{{ « il y a %s pommes et %s poires »|format(153, nb_poires) }}

{{ texte|length }} => longueur de la variable $texte

{{ tableau|length }} => nb d’elements du tableau

(p93)

{% if member.age < 12 %}

xxx

{% elseif member.age < 18 %}

xxx

{% else %}

xxx

{% endif %}

(p94)

for

(p95)

{% set foo = « bar’ %} égal à <?php $foo = « bar »; ?>

{% if var is definied %} xxx {% endif %} égal à <?php if( isset( $var ) ); ?>

 

even / odd

{% for valeur in liste %}

<span class='{% if loop.index is even %}pair{% else %}impair{% endif %}’> {{ valeur }} </span>

{% endfor %}

 

EN SAVOIR + :

http://twig.sensiolabs.org/doc/filters/index.html

———————————————————————————————————————————————————

VARIABLES GLOBALS : (p92)

{{ app.request }}

{{ app.session }}

{{ app.envirronment }} => dev, prod

{{ app.debug }} => true si mode debug activé, false sinon

{{ app.security }}

{{ app.user }}

———————————————————————————————————————————————————

VIEW : Afficher une « action » dans une « vue »

{% render( controller(« SdzBlogBundle:Blog:menu », {‘nombre’: 3}) ) %}

———————————————————————————————————————————————————

CONTENEUR DE SERVICES : (p133)

Obtenir la liste des services :

php app/console container:debug

———————————————————————————————————————————————————

CONTROLLER : (p134)

// Appel à un service (ici le service « mailer »)

$container = $this->get(‘mailer’); égal à $container = $this->container->get(‘mailer’);

———————————————————————————————————————————————————

SERVICE : (p135 à 137)

– créer dossier (ex: Sdz/BlogBundle/Antispam)

– créer class  (ex: Sdz/BlogBundle/Antispam/SdzAntispam.php)

– créer fichier extension (ex: Sdz/BlogBundle/DependencyInjection/SdzBlogExtension.php)

– ajouter le nouveau service dans Sdz/BlogBundle/Resources/config/services.yml

———————————————————————————————————————————————————

SERVICE : 

1 service = 1 class

———————————————————————————————————————————————————

SERVICE :

Dans Sdz/BlogBundle/Resources/config/services.yml

On y déclare des « services » et des « parametres ».

 

Appeler un parametre de services.yml : $container->getParameter(« nomParam »);

———————————————————————————————————————————————————

VOCABULAIRE : (p146)

Un objet dont vous confiez l’enregistrement à l’ORM s’appelle une « entité » (entity en anglais).

Persister une entité = enregistrer une entité.

Une entité = un objet.

Les commentaires utilisaient pour la création d’une table (dans la classe Xxx) se nomment : metadata.

Rajouter les « metadata » à un objet (une classe Xxx), s’appelle : mapper l’objet Xxx.

DOCUMENTATION pour définir les metadata d’une entité : http://symfony.com/doc/current/book/doctrine.html.

———————————————————————————————————————————————————

CONSOLE : creation de la classe php représentant l’entité (p150)

php app/console generate:doctrine:entity

———————————————————————————————————————————————————

CONSOLE : creation de la table (p162)

php app/console doctrine:database:create

———————————————————————————————————————————————————

CONSOLE : compare entité + etat actuel bdd ET maj (p162)

php app/console doctrine:schema:update –dump-sql (cela affiche juste les requetes a executer)

php app/console doctrine:schema:update –force (execute les requetes

———————————————————————————————————————————————————

DOCTRINE : (p150 / 151) doctrine:generate:entity (=creer class modele)

php app/console doctrine:generate:entity (pour générer une entité entière)

The entity shortcut name : SdzBlogBundle:Article (entrée)

Configuration format (yml, xml, php, or annotation) : annotation (entrée)

Entrée les attributs de la table (date, titre, auteur, nom, etc …)

Do you want to generate an empty repository class : yes (entrée)

———————————————————————————————————————————————————

DOCTRINE : (p162 / 163) doctrine:database:update (=creer table)

php app/console doctrine:database:create (créer la bdd, on ne le fait qu’une seule fois bien sur)

php app/console doctrine:schema:update –dump-sql (affiche la requete)

php app/console doctrine:schema:update –force (execute la requete affichée avec –dump-sql)

———————————————————————————————————————————————————

DOCTRINE : (p164) doctrine:generate:entities (=maj de la class modele)

php app/console doctrine:generate:entities SdzBlogBundle:Article (génère les entités en fonction du mapping)

———————————————————————————————————————————————————

DOCTRINE : (p165)

Service « doctrine » (permet de gérer la bdd)

$this->get(‘doctrine’) égal à $this->getDoctrine();

$this->getDoctrine() permet l’autocompletion

 

$em = $this->getDoctrine()->getManager(); égal à $this->get(‘doctrine.orm.entity_manager’)

$this->getDoctrine()->getManager() permet l’autocompletion

———————————————————————————————————————————————————

DOCTRINE : (p170)

$em = $this->getDoctrine()->getManager();

$em->persist() : garde cette entite en memoire, tu l’enregistreras au prochain « flush »

$em->flush() : ouvre une transaction et enregistre toutes les entites qui t’ont été donnees depuis le dernier flush()

———————————————————————————————————————————————————

DOCTRINE : (p175)

EntityManager sert à manipuler les entités

Repositories servent à récupérer les entités

———————————————————————————————————————————————————

DOCTRINE : (p182)

@ORM\OneToOne est incompatible avec @ORM\column

———————————————————————————————————————————————————

Michael

Développeur / intégrateur, travaillant en agence web depuis 2005, je viens à présent vous proposer de venir découvrir mes créations personnelles de plugins / themes pour le CMS Wordpress & Prestashop, quelques solutions en mode SAAS & un peu d'actualité web ( / Twitter).

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.