Skip to content

remi-picard/techlunch-symfony2

Repository files navigation

Techlunch Symfony 2

Installation

Télécharger Symfony2

Cloner le repository github

ou utiliser l'installeur symfony :

cd C:\wamp\www
php -r "readfile('http://symfony.com/installer');" > symfony
php symfony demo techlunch-symfony2

Lancer le serveur HTTP et la base (ex : WAMP).

Lancer l'application : http://localhost/techlunch-symfony2/web/app_dev.php/fr Page d'accueil

Voir aussi http://localhost/techlunch-symfony2/web/app_dev.php/fr/blog/

Le premier chargement est assez long, Symfony construit le cache de l'application.

Passer la base de données sqlite à Mysql en modifiant le fichier app/config/parameter.yml en s'inspirant du fichier app/config/parameter.yml.dist

Exemple de fichier app/config/parameter.yml

parameters:
    database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_port: ~
    database_name: techlunch_symfony2
    database_user: root
    database_password: null
    database_path: null

Créer la base de données

php app\console doctrine:database:create

Mettre à jour le schéma de la base

php app\console doctrine:schema:update --dump-sql
php app\console doctrine:schema:update --force

Retourner sur http://localhost/techlunch-symfony2/web/app_dev.php/fr/blog/ Il n'y a plus d'article.

Recharger les données

php app/console doctrine:fixtures:load

Cette commande est rappelée sur http://localhost/techlunch-symfony2/web/app_dev.php/fr/login

Retourner sur http://localhost/techlunch-symfony2/web/app_dev.php/fr/blog/ Les articles apparaissent à nouveau.

Mon premier bundle

Génération en ligne de commande

php app\console generate:bundle
  Welcome to the Symfony2 bundle generator



Your application code must be written in bundles. This command helps
you generate them easily.

Each bundle is hosted under a namespace (like Acme/Bundle/BlogBundle).

Bundle namespace: AbonnementBundle

Keep AbonnementBundle as the bundle namespace (choose no to try again)
? [yes]: yes

Bundle name [AbonnementBundle]:

Target directory [C:\wamp\www\techlunch-symfony2/src]:

Determine the format to use for the generated configuration.

Configuration format (yml, xml, php, or annotation): annotation

To help you get started faster, the command can generate some
code snippets for you.

Do you want to generate the whole directory structure [no]? yes


  Summary before generation


You are going to generate a "AbonnementBundle\AbonnementBundle" bundle
in "C:\wamp\www\techlunch-symfony2/src/" using the "annotation" format.

Do you confirm generation [yes]?


  Bundle generation


Generating the bundle code: OK
Checking that the bundle is autoloaded: OK
Confirm automatic update of your Kernel [yes]?
Enabling the bundle inside the Kernel: OK
Confirm automatic update of the Routing [yes]?
Importing the bundle routing resource: OK


  You can now start using the generated code!

Génération d'une entité Doctrine

php app\console generate:doctrine:entity
  Welcome to the Doctrine2 entity generator



This command helps you generate Doctrine2 entities.

First, you need to give the entity name you want to generate.
You must use the shortcut notation like AcmeBlogBundle:Post.

The Entity shortcut name: AbonnementBundle:Abonne                                                                                             

Determine the format to use for the mapping information.

Configuration format (yml, xml, php, or annotation) [annotation]:

Instead of starting with a blank entity, you can add some fields now.
Note that the primary key will be added automatically (named id).

Available types: array, simple_array, json_array, object,
boolean, integer, smallint, bigint, string, text, datetime, datetimetz,
date, time, decimal, float, binary, blob, guid.

New field name (press <return> to stop adding fields): mail
Field type [string]:
Field length [255]:

New field name (press <return> to stop adding fields): dateEnregistrement
Field type [string]: datetime

New field name (press <return> to stop adding fields):

Do you want to generate an empty repository class [no]? yes


  Summary before generation


You are going to generate a "AbonnementBundle:Abonne" Doctrine2 entity
using the "annotation" format.

Do you confirm generation [yes]?


  Entity generation


Generating the entity code: OK


  You can now start using the generated code!

Mise à jour de la base de données

php app\console doctrine:schema:update --dump-sql
CREATE TABLE Abonne (id INT AUTO_INCREMENT NOT NULL, mail VARCHAR(255) NOT NULL, dateEnregistrement DATETIME NOT NULL, PRIMARY KEY(id)) DEFAUL
T CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
php app\console doctrine:schema:update --force

Génération d'un CRUD

php app\console generate:doctrine:crud
  Welcome to the Doctrine2 CRUD generator



This command helps you generate CRUD controllers and templates.

First, you need to give the entity for which you want to generate a CRUD.
You can give an entity that does not exist yet and the wizard will help
you defining it.

You must use the shortcut notation like AcmeBlogBundle:Post.

The Entity shortcut name: AbonnementBundle:Abonne

By default, the generator creates two actions: list and show.
You can also ask it to generate "write" actions: new, update, and delete.

Do you want to generate the "write" actions [no]? yes

Determine the format to use for the generated CRUD.

Configuration format (yml, xml, php, or annotation) [annotation]:

Determine the routes prefix (all the routes will be "mounted" under this
prefix: /prefix/, /prefix/new, ...).

Routes prefix [/abonne]: /abonnement


  Summary before generation


You are going to generate a CRUD controller for "AbonnementBundle:Abonne"
using the "annotation" format.

Do you confirm generation [yes]?


  CRUD generation


Generating the CRUD code: OK
Generating the Form code: OK


  You can now start using the generated code!

L'URL http://localhost/techlunch-symfony2/web/app_dev.php/abonnement/ est maintenant disponible.

Formulaire d'ajout : Page d'ajout d'un abonné

Liste des éléments ajoutés : Page de la liste des abonnés

Ajout de la validation de formulaire

On ajoute les annotations de validation de format, d'unicité et l'ajout d'événement sur l'entité Abonne.

Mettre à jour la base pour prendre en compte la contrainte d'unicité :

techlunch-symfony2>php app\console doctrine:schema:update --dump-sql
CREATE UNIQUE INDEX UNIQ_719E8EC65126AC48 ON abonne (mail);
techlunch-symfony2>php app\console doctrine:schema:update --force

Retourner sur le formulaire http://localhost/techlunch-symfony2/web/app_dev.php/abonnement/new et saisisser une adresse mail déjà existante :

Page validation formulaire en erreur

Modification des routes

Créer une controleur Abonnement pour la partie ADMIN (/admin/abonnement). Ne laisser que l'action de création dans le controleur accessible à tous (/abonnement).

Mise à jour des routes du bundle et ajout du contrôleur Abonnement partie ADMIN.

Prise en compte de la locale dans les routes.

Ne pas oublier de renommer toutes les routes pour ne pas avoir de conflits entre les 2 contrôleurs.

On a maintenant l'abonnement accessible à tous via http://localhost/techlunch-symfony2/web/app_dev.php/fr/abonnement/

Et la gestion des abonnés via http://localhost/techlunch-symfony2/web/app_dev.php/fr/admin/abonnement/

Modification des vues

Modification du layout, des vues et des fichiers traduction

Ajout d'un service d'envoi de mail

On ajoute un objet de modèle et un service d'envoi de mail.

Ce service a besoin d'autres services pour pouvoir fonctionner. C'est le conteneur de services qui se charge de l'instanciation et de l'injection des services.

Enfin, on appelle le service lors de l'ajout d'un article sur le blog.

Ajout d'un message flash

Suite à l'abonnement, on redirige l'utilisateur sur la liste des billets et on affiche un message de succès.

Documentation :