Magazine High tech

Débuter Symfony 1.4 : 8 interrogations et erreurs courantes

Publié le 05 mars 2011 par Ph3nol

Voici quelques question que vous vous poserez sûrement si vous débutez sous Symfony (version 1.3 / 1.4).

Comment conserver l’escaping d’une chaîne stockée en base de données (par exemple) ?

Il suffit de renseigner le paramèrtre ESC_RAW de la méthode utilisée.

Par exemple, nous avons un utilisateur $user qui à renseigné sa « biographie » (en HTML) que vous appelez par $user->getBiography(). Vous utiliserez alors :

echo $user->getBiography(ESC_RAW); // pour conserver les tags HTML

N’oubliez pas que pour vos vues, simple_format_text() est une fonction du helper Text prévue à cet effet.

Ma route sfDoctrineRoute n’accepte pas les POST ?

Par défaut, lorsque vous utilisez une route tu type sfDoctrineRoute, GET est utilisé pour passer l’objet voulu que l’on récupère via $myObject = $this->getRoute()->getObject(). Il faudra alors permettre l’utilisation de données POST pour qu’elles soient prises en compte.

Pour cela, dans votre schema.yml, il suffit de renseigner sf_method des requirements de votre route, comme ci-dessous :

my_route:
  url:     /:sf_culture/my/example/of/route
  class:   sfDoctrineRoute
  options:
    model: MyModel
    type: object
  param:   { module: sfExamples, action: test }
  requirements:
    sf_method: [GET, POST]
    sf_culture: (?:fr|en)

Utiliser le helper Text et __() dans une action

Voici comment vous pourrez appeler la fonction __() du helper Text depuis une action :

$this->getContext()->getI18N()->__('La chaîne à traduire...')

Si vous souhaitez le faire depuis un autre endroit, vous pouvez via sfContext :

sfContext::getInstance()->getI18N()->__('La chaîne à traduire...')

Le doctrine:build et l’erreur « The default context does not exist »

Une des erreurs les plus courantes chez les débutants, directement liée au travail que vous pourrez effectuer sur les models. Si vous rencontrez cette erreur, il y a fort à parier que vous avez tenté de surcharger une méthode save, preSave, postSave ou encore updateSave.

Plus précisément, l’erreur vient du fait d’appeler sfContext depuis votre model (pour récupérer une variable de app.yml par exemple, ou encore d’accéder à sfUser).

Il est important de garder à l’esprit qu’appeler sfContext dans un model n’est pas une bonne pratique et provoquera des erreurs, notamment au niveau de la commande doctrine:build.

Ma librairie, située dans /lib, n’est pas chargée par mon application…

Depuis la version 1.3, Symfony ne charge automatiquement (autoload) les librairies contenues dans /lib de manière récursive.

Vous pouvez créer un autoload.yml, situé dans /config, pour déterminer les librairies à inclure :

autoload:
  exemple:
    path: %SF_LIB_DIR%/vendor/exemple
    recursive: on

  exemple2:
    path: %SF_LIB_DIR%/vendor/exemple2
    recursive: on

  exemple3:
    path: %SF_LIB_DIR%/vendor/exemple3
    recursive: on

Ajouter un préfixe aux tables MySQL créées par Doctrine

Avec cette astuce, les tables créées par Doctrine en fonction des models déclarés dans votre schema.yml auront le préfixe que vous leur attribuerez. Par exemple « sly_ » : sly_table1, sly_table2, sly_table3, etc.

Pour cela, rendez-vous dans config/databases.yml et ajoutez un paramètre attributes :

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn: mysql:host=localhost;dbname=exemple
      username: exemple
      password: p4ssw0rd
      attributes:
        tblname_format: sly_%s

Ne pas utiliser de vue pour une action ou retourner une simple chaîne de caractères

Une petite astuce pour ne pas utiliser de vue. Ajoutez simplement ceci à la fin de votre action :

return sfView::NONE;

Vous pouvez également retourner une chaîne de caractère simple (sans vue) en utilisant :

return $this->renderText('Chaîne à retourner...');

Passer une variable dans un url_for() ou un link_to() de type sfDoctrineRoute

Pour utiliser une route du type sfDoctrineRoute avec les fonctions url_for() et link_to() du helper Text, nous nous servons par exemple de :

Pour passer des variables supplémentaires, il suffit de se servir d’un array() dans le 3ème élément de link_to (2ème de url_for). Exemple :

 $objet, 'var1' => 'Exemple', 'var 2' => 'Exemple')); ?>

Conclusion

J’espère que ces quelques astuces vous serviront à répondre à certaines question ou à anticiper vos éventuelles interrogations. D’autres astuces et conseils suivront prochainement.

En cas de questions, remarques ou suggestions, vous pouvez me contacter sur Twitter : @Ph3nol.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Ph3nol 38 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazines