Symfony et la base de données

Symfony Mon projet avance. J’utilise maintenant une base de données avec tout ce que fourni Symfony.

Encore une fois, je ne fais pas un didacticiel. Je vais juste dire rapidement ce que j’ai dû faire et donner mes impressions.

Configurer sa base de données

En un mot: fastoche !

En lisant la doc 08-Inside-the-Model-Layer.txt, ça se fait tout seul.

Il y a un fichier de configuration pour la connexion à la base de données, pour l’instant, rien de spécial. Mais il y a surtout le schema de la base écrit en YAML, et ça c’est sympa. Voilà à quoi ressemble le mien pour l’instant:

propel:
  law:
    _attributes: { phpName: Law }
    id:
    category_id:  { type: integer, foreignTable: category, foreignReference: id, onDelete: cascade }
    message:      longvarchar
    created_at:
    updated_at:
    enabled:      boolean
    
  category:
    _attributes: { phpName: Category }
    id:
    label:        varchar(255)
    created_at:

Vous remarquerez que parfois, je ne met pas le type du champ. C’est parce qu’il y a une convention de nommage qui permet d’affecter automatiquement des types. Comme id qui est un INTEGER, primary key et auto-increment.

Création des classes

Ce que j’aime particulièrement, c’est la création des classes automatiquement avec les getter et les setter. A chaque fois qu’on modifie le schema, on peut relancer la génération des fonctions de base. Ca fait gagner un temps fou ! J’ai donc déjà les méthodes:

De plus, il y a aussi des classes avec des méthodes statiques pour retrouver des enregistrements:

Génération de l’admin

Et pour couronner le tout, on peut même générer un site admin pour gérer ses données. Tout ça en ligne de commande. Ca se passe dans la doc 14-Generators.txt.

La seule chose que le générateur ne fait pas, c’est le routing. Voilà ce que j’ai dû écrire moi même:

law_list:
  url:   /law
  param: { module: law, action: list }
 
law_show:
  url:   /law/:id.html
  param: { module: law, action: show }
 
law_create:
  url:   /law/create
  param: { module: law, action: create }
 
law_edit:
  url:   /law/edit/:id
  param: { module: law, action: edit }
  
law_update:
  url:   /law/update
  param: { module: law, action: update }
 
law_delete:
  url:   /law/delete/:id
  param: { module: law, action: delete }
  
 
category_list:
  url:   /category
  param: { module: category, action: list }
 
category_show:
  url:   /category/:id.html
  param: { module: category, action: show }
 
category_create:
  url:   /category/create
  param: { module: category, action: create }
 
category_update:
  url:   /category/update
  param: { module: category, action: update }
 
category_edit:
  url:   /category/edit/:id
  param: { module: category, action: edit }
 
category_delete:
  url:   /category/delete/:id
  param: { module: category, action: delete }

Et dans l’admin, quand je crée/edite une loi, je peux choisir la catégorie dans une liste déroulante. Symfony m’a retrouvé toutes les catégories existantes. J’arrive même pas à imaginer le temps que ça m’aurait pris pour faire ça.

Conclusion

Ca déchire !

J’continue le projet …

Commentaires