On a déjà vu comment générer un bundle. Et bien pour notre CRUD, on va en générer un rien que pour ses beaux yeux. Donc on va créer un bundle. Ici, je l’appelle CrudBundle (car je suis une personne originale).
Occupons-nous de mettre un chouette préfixe à notre nouveau bundle dans le routing général (celui du dossier App). Ici, sobrement mais surement, le préfixe sera /crud.
On va éditer un menu qui existait déjà dans un autre bundle. Et on va rajouter la page d’accueil du CRUD.
Quand on fait sa base de données, on doit bien faire gaffe qu’il y a une et une seule clef primaire par table.
On doit également faire attention qu’il n’y ait pas d’underscore sur les champs des tables (pour les tables de jointures, on s’en fout parce que Symfony les ignore royalement).
Dans notre CrudBundle > Resources > datas (dossier que nous créons nous-même), on va enregistrer le fichier mwb (de workbench) et le sql (qu’on récupère au moment du forward)
Avant toute chose, on va aller dans parameters pour changer le nom de la DB (par défaut c’est Symfony mais là, ça sera autre chose).
Bah ouais, la DB s’appelle pas Symfony
On a fait un premier « lien » avec la DB en indiquant dans parameters le nom de la DB concernée. Maintenant, on va faire le lien dans le projet Symfony en générant des fichiers liés aux tables. Pour ce faire, on tape :
php app/console doctrine:mapping:import annotation
Comme on n’est pas à l’abri d’une éventualité, on va vérifier que le mapping a été fait correctement en tapant :
php app/console doctrine:mapping:info
Si tout s’est bien passé, dans le projet Symfony, on aura un nouveau fichier dans le dossier Bundle > Entity > Nom_de_la_table.php
Maintenant, on va générer les entités (les setters et getters) avec :
php app/console doctrine:generate:entities CrudBundle
Et on peut voir brièvement qu’effectivement, notre fichier Nom_de_la_table.php a été rallongé avec du code (les setters et getters).
Maintenant, passons à la partie un peu plus sexy du tuto : comment générer le CRUD (ouais la partie chiante qu’on se tapait à la main avant)
On va ensuite vérifier que tout s’est bien passé avec notre projet Symfony en tapant :
php app/console doctrine:schema:validate
Doux Jesus ! Il y a des fichiers qui ont été créés !
Petite observation : On observe qu’il y a un dossier Form avec un Nom_de_classeType.php dedans. Et dans notre Nom_de_classeController, on y fait mention. Bah voilà, vous avez fait le lien tout seul.
Dans le Nom_de_classeController, on a ceci :
Qui va afficher ceci :
Ici, on va créer manuellement un constructeur (parce que déjà y’en a pas) et surtout parce que sinon, quand on va essayer d’insérer des trucs, il va gueuler à cause du format de la date. Ici, on va donc indiquer qu’on veut que la date soit en DateTime.
Et là, on peut afficher des trucs comme ça et même faire des insertions réussies !
Petite observation : on retrouve des appels de formulaires. C’est beau.
Dans le Controller, dans les annotations, on repère le chemin : crud_test_index
Et on va s’en servir pour créer un lien dans l’affichage.
Notons un autre truc : les fichiers générés lors de la création du CRUD dans la console se trouvent dans app/Resources/views
Mais pour pas s’embêter, on va les bouger jusque dans CrudBundle/Resources/views
Mais du coup, dans les 4 fichiers, on doit changer le lien pour le render :