FAQ SymfonyConsultez toutes les FAQ
Nombre d'auteurs : 17, nombre de questions : 81, dernière mise à jour : 18 juin 2017 Ajouter une question
Les questions redondantes se multipliant sur le forum Symfony, nous avons choisi de créer cette FAQ afin de regrouper les questions qui sont posées fréquemment.
Vos remarques et idées sont les bienvenues. Et pourquoi pas votre aide ! S'il vous prend l'envie de tailler votre plus belle plume et de retrousser vos manches, il y a de quoi faire !
- Comment installer Symfony via PEAR en local ?
- Comment ajouter du JS ou du CSS entre <head> et </head> ?
- Quelle est la différence entre redirect() et forward() ?
- Comment insérer du code personnalisé dans la balise head (ou ailleurs) ?
- Comment transférer un paramètre avec forward() ?
- Comment mettre à jour simultanément plus d'un élément d'une page avec AJAX ?
- Autocomplétion de code pour Eclipse ?
- Comment faire des tests unitaires ?
- Comment utiliser l'URL rewriting ?
- Comment changer l'aspect des URL ?
- Télécharger le fichier de channel à l'adresse : http://pear.symfony-project.com/channel.xml
- Dans la console, taper : pear channel-add "monChemin/channel.xml"
- Télécharger la dernière version stable du framework à cette adresse : http://www.symfony-project.org/get/symfony-stable.tgz
- Dans la console, exécuter : pear install --offline "monChemin\symfony-stable.tgz"
Cela peut être utile lorsque le proxy bloque PEAR pour accéder à pear.symfony-project.com...
On peut ajouter des lignes JavaScript simplement dans le fichier de configuration apps/application/config/view.yml où on peut trouver un paramètre javascripts. Il en va de même pour les feuilles de styles :
Dans /apps/application/config/view.yml :
stylesheets: [main.css, print.css]
Vous pouvez aussi utiliser un helper dans votre fichier de template :
Code : | Sélectionner tout |
1 2 3 | <?php use_stylesheet('main.css'); ?> <?php use_javascript('mon_script.js'); ?> |
Les fichiers JavaScript doivent se trouver, physiquement ou symboliquement, dans le dossier js du contrôleur, les feuilles de style dans le dossier css!
Vous pouvez aussi utiliser un fichier de configuration view.yml par module pour spécifier précisément les fichiers CSS et JS à charger pour chaque template (et, par conséquent, action). Par exemple, dans le fichier apps/APPLICATION/modules/MODULE/config/view.yml :
stylesheets: [...]
all:
stylesheets: [...]
Quelle est la différence entre :
En revanche, la méthode redirect() redirige complètement le serveur vers la page appelée, cela produit donc une nouvelle requête HTTP complète. Ce n'est pas la même URL qui est affichée dans le navigateur.
Notez que ces deux fonctions peuvent prendre des paramètres à fournir à l'action qui est la cible du lien sous la forme d'un tableau associatif. Par exemple, si l'action cible utilise le paramètre id fourni dans l'URL, vous pourrez faire ceci :
Il suffit d'utiliser un slot. Un slot est un emplacement réservé que l'on peut placer dans n'importe quel élément : un layout, un partial ou un component. Il se comporte alors comme une variable dont on peut modifier à volonté la valeur.
Le code destiné à être placé dans le slot est contenu dans le « response global », et peut être défini n'importe où.
Exemple : on souhaite intégrer des styles entre les balises <head> et </head> dans un template particulier, et uniquement dans ce template. On commence par placer le slot dans le layout.php de l'application, entre les balises <head> et </head> :
Code : | Sélectionner tout |
1 2 3 4 | <?php if (has_slot('my_slot_style')): ?> <?php include_slot('my_slot_style') ?> <?php endif; ?> |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | <?php slot('my_slot_style') ?> <style type="text/css"> h1{ font-size:36pt; text-decoration:underline; } </style> <?php end_slot() ?> |
Notez qu'il s'agit de la méthode conseillée pour mettre un titre à vos pages. Par exemple, vous pouvez mettre ceci dans votre layout principal :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 | <head> <?php include_http_metas() ?> <?php include_metas() ?> <title><?php include_slot('title'); ?></title> <!-- ... --> </head> |
Code : | Sélectionner tout |
1 2 | <?php slot('title', 'Titre de la page')?> |
Si l'on souhaite accéder aux paramètres envoyés par le client, il n'est pas nécessaire de transmettre les paramètres à la nouvelle action. Par contre, si l'on a créé une variable locale dans la première action, pour la rendre disponible dans la seconde action il faut utiliser ce type de code dans la première action :
Code : | Sélectionner tout |
1 2 | $this->getRequest()->getParameterHolder()->set('ma_variable', $valeur); |
Code : | Sélectionner tout |
1 2 | $this->ma_variable = $this->getRequestParameter('ma_variable') ; |
Les helpers JavaScript n'existent plus à partir de la version 1.4 de Symfony. Utilisez à la place un framework JS comme JQuery ou protoype.
Pour mettre à jour simultanément plus d'un élément dans une page, vous devez un peu bricoler la fonction remote_function qui possède une propriété très utile « complete » :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | echo javascript_tag( remote_function(array( 'update' => 'Zone2', 'url' => 'ajax/updatediv1', 'script' => true , 'complete' => remote_function(array( 'update' => 'Zone1', 'url' => "Le nom de votre module/le nom de l'action qui va mettre à jour Zone1", 'script' => true)), )) ); |
Vous pouvez même préciser le nombre d'appels que vous souhaitez en ajoutant dans chaque remote_function cette propriété « complete ».
Nous pouvons configurer notre outil Eclipse PDT ou Zend Studio for Eclipse pour nous faciliter le travail :
- rendez-vous sur PHP Explorer et faites dérouler votre projet ;
- cliquez droit sur Include Paths et sélectionnez Configure Include Path ;
- sélectionnez l'onglet librairies et cliquez sur add External Folder pour ajouter le répertoire de votre projet Symfony à la racine.
Pour ajouter également l’autocomplétion pour Propel, éditez la ligne où se trouve propel.builder.addComments :
Les tests unitaires sont intégrés dans Symfony et c'est une bonne chose pour connaître l'impact de nos mises à jour sur nos modules.
Avant tout, voici quelques méthodes implémentées :
- ok($test, $msg) // Teste une condition et ne retourne aucune erreur si elle est vraie
- is($value1, $value2, $msg) // Compare deux valeurs et ne retourne aucune erreur si elle est vraie
- isnt($value1, $value2, $msg) // Test l'inégalité de deux valeurs
- like($string, $regexp, $msg) // Test une chaine de caractères à travers une expression régulière
- unlike($string, $regexp, $msg) // Contraire de like
- cmp_ok($value1, $operator, $value2, $msg) // Compare deux arguments avec un opérateur
- isa_ok($variable, $type, $msg) // Vérifie le type d'un argument
- isa_ok($object, $class, $msg) // Vérifie la classe d'un objet
- can_ok($object, $method, $msg) // Vérifie une méthode d'une classe ou d'un objet
- is_deeply($array1, $array2, $msg) // Vérifie que deux tableaux on les mêmes valeurs
- include_ok($file, $msg) // Vérifie si un fichier existe et qu'il a bien pu être inclus
- fail() // Une faille : utile pour tester des exceptions
- pass() // Valider : pour tester une exception
- skip($msg, $nb_tests) // Nombre de tests à échapper : pour les tests conditionnels
- todo() // Message compté comme un test
> php symfony test-unit maFonction maSecondeFonction ## Execute deux tests : maFonctionTest.php et maSecondeFonctionTest.php
> php symfony test-unit '*' ## Execute tous les tests du repertoire test/unit
Lorsque vous créez une application, un fichier situé dans apps/<monapplication>/config se nommant settings.yml, contient les configurations principales de Symfony.
Pour chaque environnement, vous pouvez spécifier une directive :
no_script_name: off (ou "on" pour l'utilisation du url rewriting)
Lorsque vous créez des articles ou des billets pour votre blog, vous voudriez changer l'aspect de vos URL pour qu'elles soient le plus facilement référencées.
Nous allons donc pour cela configurer la classe de notre modèle concernée. Nous prendrons Articles.php que Propel a généré à partir du schema.yml "_attributes: { phpName: Articles }". Commencez par éditer le fichier lib/model/Articles.php :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | class Articles extends BaseArticles { public function getUrlTitle() { // Suppression et conversions des caractères $result = self::remove_accents($this->getTitle()); $result = strtolower($result); $result = preg_replace('/\W/', ' ', $result); $result = preg_replace('/\ +/', '-', $result); $result = preg_replace('/\-$/', '', $result); $result = preg_replace('/^\-/', '', $result); return $result; } public function remove_accents($str, $charset='utf-8') { $str = htmlentities($str, ENT_NOQUOTES, $charset); $str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str); $str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str); // pour les ligatures e.g. 'œ' $str = preg_replace('#\&[^;]+\;#', '', $str); // supprime les autres caractères return $str; } } |
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public function executePermalink() { /* Methode de lien permanent (Doc. Symfony) */ $posts = PostPeer::doSelect(new Criteria()); $title = $this->getRequestParameter('title'); foreach ($articles as $articles) { if ($post->getStrippedTitle() == $title) { $this->getRequest()->setParameter('id', $article->getId()); return $this->forward('articles', 'show'); } } $this->forward404(); } |
Code : | Sélectionner tout |
1 2 | link_to($article->getTitle(), '@article?title='.$article->getStrippedTitle()) |
url: /articles/:title
param: { module: articles, action: permalink }
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.