symfony – bac à sable
Comme son nom l’indique c’est le tuto de base pour bien commencer avec symfony.
Il est dispo partiellement traduit ici : http://www.symfony-project.com/trac/wiki/Documentation/fr_FR/my_first_project/trunk
L’extension sqlite de PHP devra être activé pour que tout se passe bien.
comme dans le tuto askeet la génération du modèle ne fonctionne pas comme indiqué dans le tuto.
En effet la comande
symfony propel-build-model
doit toujours être pérécdée de la commande
propel-convert-xml-schema
qui génère le modèle yml à partir de sa version xml et de la suppression du schema.xml lui même!!
Tout le reste doit fonctionner. J’ai ajouté quelques variantes pour voir un peu si j’arrivais à m’en sortir…
Dans le template de création d’un post editSuccess.php
J’ai voulu pré-sélectionné le post associé au commentaire au lieu de le mettre dans un e variable HTML cachée. Il suffit de remplacer
<tr>
<th>Post*:</th>
<td><?php echo object_select_tag($comment, 'getPostId', array ('related_class' => 'Post',)) ?></td>
</tr>
par
<tr>
<th>Post*:</th>
<td><?php echo object_select_tag($comment, 'getPostId', '', $sf_request->getParameter('post_id')) ?></td>
</tr>
La pré-selection devrait marcher mais les intitulés de la liste reste les identifiants des posts … Pour que ce soit leur titre qui s’affichent dans la liste, il suffit de définir une méthode __toString() pour l’objet post. Donc dans /lib/model/Post.php ajouter
public function __toString()
{
return $this->getTitle();
}
rien d’autre à faire la classe …
J’ai voulu aussi un peu mieux gérer les erreur du formulaire
pour cela il suffit de charger le helper de validation
<?php use_helper('Object','Validation') ?>
Il est à noter que le tuto askeet mentionne une fonction use_helpers pour charger plusieurs helpers, qui n’existe plus.
Ensuite j’ai voulu que le message d’erreur s’affiche au dessus de chaque champs, il faut donc avoir accès au message contenu dans le yml de validation (…validate/update.yml) à partir du nom du champs, ce qui se fait grâce au helper Validation comme suit
form_error('nom_de_champs')
ensuite il faut récupérer les données soumises ce qui se fait de manière équivalente
sf_request->getParameter('nom_de_champs')
ou
$sf_params->get('nom_de_champs')
Il ne reste qu’à initialiser les champs du formulaire avec, ce qui donne à peu près ça
<tr>
<th>Author: </th>
<td>
<?php echo form_error('author') ?><br />
<?php echo object_input_tag($comment, 'getAuthor', array ('size' => 80,),$sf_params->get('author')) ?>
</td>
</tr>
<tr>
<th>Email:</th>
<td>
<?php echo form_error('email') ?><br />
<?php echo object_input_tag($comment, 'getEmail', array ('size' => 80,),$sf_params->get('email')) ?>
</td>
</tr>
<tr>
<th>Body:</th>
<td>
<?php echo form_error('body') ?><br />
<?php echo object_textarea_tag($comment, 'getBody', array ('size' => '30x3',),$sf_params->get('body')) ?></td>
</tr>
En savoir plus sur les forms avec symfony : http://www.symfony-project.com/book/trunk/10-Forms
réécriture d’url
la variable $sf_last_module est à oublier au même titre que use_helpers donc
<td><?php echo link_to($post->getTitle(), '/'.$sf_context->getModuleName().'/permalink?title='.$post->getStrippedTitle()) ?></td>
ou plus simplement
<td><?php echo link_to($post->getTitle(), '/weblog/permalink?title='.$post->getStrippedTitle()) ?></td>
Sécuristaion du backOffice
Ce n’est pas mentionné dans le tutoriel (parcontre c’est suggéré par le message de symfony) mais il faut absolument commenter le forward présent par défaut dans la méthode executeIndex()… sinon les forwards vont boucler


Merci ! j’aurai bien aimé tomber sur ce poste à mes débuts !
J’en ai un qui peut être complémentaire pour les symfoniacs en herbe :
http://blog.jaycreation.net/post/Tutoriel-Symfony-L-aide-indispensable-a-la-creation-d-une-application-Symfony
Commentaire by jaycreation — 29 juin 2010 @ 12 h 34 min