Voici la suite très attendue
d’Installer Symfony, pour écrire cet article je me base sur le tutoriel Jobeet en français.
Déjà j’ai pris le temps de comprendre les VirtualHost, donc on fait je crée un nom de domaine dans mon /etc/hosts/ en ajoutant une ligne : 127.0.0.1 learn.localhost puis je vais voir /etc/apache2/sites-avaible/default et je rajoute un VirtualHost (en entier) :
<VirtualHost *:80>
DocumentRoot /var/www/Tests/LearnTogether/web
DirectoryIndex index.php
ServerName learn.localhost
<Directory "/var/www/Tests/LearnTogether/web">
AllowOverride All
Allow from All
</Directory>
Alias /sf /var/www/Tests/LearnTogether/data/web/sf
<Directory "/var/www/Tests/LearnTogether/data/web/sf">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
L’Alias pour /sf n’est pas indispensable mais il éviter la copie du dossier sf/ que je vous ai fait faire
.
Maintenant quand vous allez sur http://learn.localhost/ c’est Symfony qui vous accueille
.
Le projet
Si vous avez un projet, faîtes une maquette sur Gimp/Inkscape/… et un schéma de la base de données sur Dia/Inkscape/… Personnelement je n’ai pas fait de maquette mais je l’avais à peu près imaginé, pareil pour la base de données.
Donc mon projet s’appelle LearnTogether, le principe : vous avez une question, vous la posez, si il n’y a pas de réponse, alors vous pouvez proposer votre réponse, et tout le monde vote pour la meilleure réponse (mais aussi les meilleures questions). Comme ça au bout d’un moment on a répondu à toute les questions possibles (ou pas) !
On s’occupe de la base de données !
Voici le fichier config/doctrine/schema.yml :
Question:
actAs: { Timestampable: ~ }
columns:
content: { type: string(4000), notnull: true }
rate: { type: integer, default: 0 }
answer_id: { type: integer, default: 0 }
Answer:
actAs: { Timestampable: ~ }
columns:
content: { type: string(4000), notnull: true }
rate: { type: integer, default: 0 }
question_id: { type: integer, notnull: true }
relations:
Question: { onDelete: CASCADE, local: question_id, foreign: id }
Mais non je vais pas vous laisser seul devant ce fichier :
- Chaque grosse section (Question et Answer) correspond à des tables, ici celle qui contiendra les questions et celle qui contiendra les réponses.
- Le
actAs: { Timestampable: ~ } permet à Symfony de créer des champs created_at et updated_at pour gérer la date de création et la date de mise à jour de la question et de la réponse.
- Vous devriez reconnaître de qu’il y a dans columns : ça correspond aux colonnes de table, c’est exactement comme si faisiez votre table depuis PhpMyAdmin (d’ailleurs vous pouvez la créer depuis PhpMyAdmin et l’exporter avec ./symfony doctrine:build-schema).
- J’ai créé une relation entre Answer et Question qui permet de supprimer toutes les réponses d’une question si on supprime la question.
Bon, elle serait un peu vide cette base de données, on va donc la remplir un peu pour les tests, dans data/fixtures/ j’ai créé deux fichiers : questions.yml
Question:
creator:
content: Who is The Creator ?
linux:
content: Why linux is better ?
switch:
content: How can I switch to Linux ?
name:
content: What's your name ?
et answers.yml
Answer:
me:
content: It's me !
question_id: 1
god:
content: Oh my god !
question_id: 1
rate: 3
everybody:
content: Oh yes, everybody !
question_id: 1
rate: 9
liveCD:
content: Use a Live CD of Linux, like Ubuntu !
question_id: 3
rate: 8
no:
content: I have no name !
question_id: 4
rate: 5
Bon là c’est compréhensible, on crée des entrées sachant les champs ne sont pas tous obligatoires (faîtes pas attention à ce que j’ai mis
).
Pour que tout ça soit mis en place, on fait : ./symfony doctrine:build –all –and-load.
Si vous regardez votre base de données dans PhpMyAdmin, vous verez ce que l’on a mis en place, mais sur le site rien n’a changé… heureusement Symfony est formidable et automatise tout ça !
./symfony doctrine:generate-module –with-show –non-verbose-templates learn question Question
Avec learn le nom de l’application, question le nom du module, et Question le nom de la table. On peut faire pareil pour les réponses :
./symfony doctrine:generate-module –with-show –non-verbose-templates learn answer Answer
Là vous pouvez voir tout ça dans http://learn.localhost/learn_dev.php/question et http://learn.localhost/learn_dev.php/answer.
Là normalement vous êtes sur-motivés pour continuer et apprendre à changer l’apparence du site !