3. Qui suis-je?
• Philippe Gamache
•Expert en sécurité PHP
chez Parler Haut, Interagir
Librement
•Auteur du livre « Sécurité
PHP 5 et MySQL » avec
Damien Seguy, chez
Eyrolles
•http://www.ph-il.ca
•http://lapageamelkor.org
•naheulbeukauquebec.ca
3
7. Création du projet
• Installation de symfony
$ mkdir -p blogue/lib/vendor
$ cd blogue/lib/vendor
• Créer le répertoire du projet
$ svn checkout
http://svn.symfony-project.com/tags/
RELEASE_1_4_0
• Vérifier la version de symfony
$ symfony -V
7
8. Création du projet
• Créer un projet
$ symfony generate:project blogue
• Créer une application
$ symfony generate:app /
--escaping-strategy=on /
--csrf-secret=Unique$ecr3t1 /
frontend
• Ajuster votre serveur web
8
10. La base de données
• Créer la base de données
$ mysqladmin -uroot -pmYsEcret /
create blog
• Configurer le projet
$ symfony configure:database /
--name=doctrine /
--class=sfDoctrineDatabase /
"mysql:host=localhost;dbname=blog" /
root mYsEcret
10
15. Données de tests
BlogPost:
post_1:
Author: philippeg
title: Lorem ipsum dolor sit amet
content: |
<p>Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut...</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do...</p>
is_published: true
published_at: 09-01-07
post_2:
Author: philippeg
title: Ut enim ad minim veniam
content: |
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris...</p>
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse...</p>
is_published: true
published_at: 09-01-07
post_3:
Author: philippeg
title: Duis aute irure dolor in reprehenderit in voluptate
content: |
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse...</p>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris...</p>
is_published: true
published_at: 09-01-07
...
15
16. Données de tests
BlogComment:
comment_1:
BlogPost: post_1
author_name: lorem
content: Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
comment_2:
BlogPost: post_1
author_name: elit
content: Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
sunt in culpa qui officia deserunt mollit anim id est laborum.
comment_3:
BlogPost: post_3
author_name: aute
content: Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.
comment_4:
BlogPost: post_3
author_name: aute
content: ESunt in culpa qui officia deserunt mollit anim id est laborum.
16
17. Creation Doctrine
• Creation des tables, des modèles, des
formulaires, monter de test
$ symfony doctrine:build
--all --and-load
17
18. Création du code
• Utiliser le générateur de code
$ symfony doctrine:generate-module /
frontend post BlogPost
• Effacer les actions inutiles
• executeNew()
• executeEdit()
• executeUpdate()
• executeDelete()
• processForm()
18
19. Création du code
• Effacer les fichiers inutiles
• templates/_form.php
• templates/editSuccess.php
• templates/newSuccess.php
• Effacer les liens vers les autres
fonctions
19
22. Création du code
• Ajouter au templates/layout.php
<div id="header">
<h1><?php echo link_to('Mon Blogue', '@homepage') ?></h1>
</div>
<div id="content">
<?php echo $sf_data->getRaw('sf_content') ?>
</div>
<div id="footer"></div>
• Modifier web/css/main.css
22
23. Création du code
• Modifier actions.class.php
public function executeIndex(sfWebRequest $request)
{
$this->blog_post_list = Doctrine::getTable('BlogPost')
->createQuery('a')
->where('a.is_published = 1')
->execute();
}
public function executeShow(sfWebRequest $request)
{
$this->blog_post = Doctrine::getTable('BlogPost')
->findOneBySlug($request->getParameter('slug'));
$this->forward404Unless($this->blog_post);
}
23
24. Création du code
• Ajouter à BlogPost.class.php
public function getContentSummary()
{
$out = explode('<', nl2br(substr($this->getcontent(), 0, 500)));
return $out[0] . '...';
}
• Modifier routing.yml
homepage:
url: /
param: { module: post, action: index }
post_show:
url: /:slug
param: { module: post, action: show }
24
25. Ajouter les
commentaires
• Utiliser le générateur de code
$ symfony doctrine:generate-module /
frontend comment BlogComment
• Copier le code dont vous aurez besoin
25
26. Ajouter les
commentaires
• Modifier le code dans actions.class.php
public function executeIndex(sfWebRequest $request)
{
$this->blog_post_list = Doctrine::getTable('BlogPost')
->createQuery('p')
->groupBy('p.published_at, p.id')
->where('p.is_published = 1')
->execute();
}
public function executeShow(sfWebRequest $request)
{
$this->blog_post = Doctrine::getTable('BlogPost')
->findOneBySlug($request->getParameter('slug'));
$this->forward404Unless($this->blog_post);
$this->form = new BlogCommentForm();
}
26
27. Ajouter les
commentaires
• Modifier le code dans actions.class.php
public function executeCreate(sfWebRequest $request)
{
$this->forward404Unless($request->isMethod(sfRequest::POST));
$this->blog_post = Doctrine::getTable('BlogPost')
->findOneBySlug($request->getParameter('slug'));
$this->forward404Unless($this->blog_post);
$comment = new BlogComment();
$comment->setBlogPost($this->blog_post);
$this->form = new BlogCommentForm($comment);
$this->processForm($request, $this->form);
$this->setTemplate('show');
}
27
28. Ajouter les
commentaires
• Modifier le code dans actions.class.php
public function processForm(sfWebRequest $request, sfForm $form)
{
$form->bind($request->getParameter($form->getName()));
if ($form->isValid())
{
$blog_comment = $form->save();
$this->redirect('@post_show?slug=' .
$request->getParameter('slug'));
}
}
• Ajouter a routing.yml
comment:
url: /comment/:slug
param: { module: post, action: create }
28
41. Création du Backend
• Modifier myUser.class.php
class myUser extends sfGuardSecurityUser
{
}
41
42. Pour aller plus loins
• Ajouter étiquettes (tags)
• Ajouter un mini-calendrier
• Mettre les billets par mois
• Ajouter recherche par date
• Ajouter des flux de données (RSS,
ATOM) via sfFeed2plugins
42