| auteur : Les forums |
1.0 est la version la mieux adaptée pour les projets qui ont besoin d'être maintenus sur le long terme. Sortie en janvier 2007, cette version sera maintenue (corrections de bugs par Sensio Labs) jusqu'en janvier 2010.
Télécharger et installer Symphony 1.0
1.1 est la meilleure version pour les nouveaux projets. Sortie en juin 2008, elle dispose de nouvelles fonctionnalités et d'une plus grande flexibilité. Le support est assuré jusqu'en juin 2009.
Télécharger et installer Symphony 1.1
|
| auteur : phpiste |
L'erreur "MySQL extension not loaded" durant la génération du schéma de la base de données avec Propel ?
En fait, dans ce cas symfony ne cherche pas le bon fichier de configuration php.ini.
Il faut simplement modifier le fichier php.ini situé dans le répertoire "php5" de symfony. Une alternative est de reprendre le fichier php.ini utilisé par Apache (se reporter à la fonction phpinfo() pour le localiser) mais en prenant garde d'adapter les chemins d'accès qui s'y trouvent.
|
| auteur : Sébastien D. |
Il est possible d'utiliser plusieurs base de données avec symfony. Pour ce faire, nous devons créer deux configuration dans "config/databases.yml" :
all:
propel:
class: sfPropelDatabase
param:
dsn: pgsql://base1@hostname/database1
database2:
class: sfPropelDatabase
param:
dsn: mysql://base2@hostname/database2
|
Lorsque c'est fait, lancez un clear-cache "symfony cc" et vous pourrez exploiter ces deux bases comme ceci :
$c = new Criteria();
$ bd1 = ArticlePeer: : doSelect($ c , Propel: : getConnection(' propel ' ));
$ bd2 = ArticlePeer: : doSelect($ c , Propel: : getConnection(' database2 ' ));
|
Pour des utilisations plus avancées, vous pouvez imaginer un système de backup et "RAID".
|
| auteur : phpiste |
On peut ajouter des lignes JavaScript simplement dans le fichier de configuration apps/application/config/view.yml où on peut trouver un paramètre :
Insérer les noms des fichiers JavaScript séparés par des virgules. Il en va de même pour les feuilles de style :
|
| auteur : Tsilefy |
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> :
<?php if (has_slot(' my_slot_style ' )): ?>
<?php include_slot(' my_slot_style ' ) ?>
<?php endif ; ?>
|
Ensuite, on définit le slot dans le template en question (ex : indexSuccess.php)
<?php slot(' my_slot_style ' ) ?>
< style type= " text / css " >
h1{
font- size: 36pt;
text- decoration: underline;
}
< / style>
<?php end_slot() ?>
|
Le style voulu apparaîtra alors uniquement avec le template indexSuccess.
|
| auteur : phpiste |
Quelle est la différence entre :
$this ->forward (' module ' , ' action ' )
|
Et :
La méthode forward() change simplement l'action en cours pour une autre. On reste dans la même transaction HTTP. Pour le client, on est donc toujours dans la même URL.
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.
|
| auteur : phpiste |
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 :
$this ->getRequest ()- > getParameterHolder()- > set(' ma_variable ' , $ valeur );
|
Dans la seconde action, on récupère la variable de cette manière :
$this ->ma_variable = $this ->getRequestParameter (' ma_variable ' );
|
|
| auteur : phpiste |
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 » :
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 )),
))
);
|
Lorsque l'appel AJAX n°1 se termine, il déclenche automatiquement l'appel n°2.
Vous pouvez même préciser le nombre d'appels que vous souhaitez en ajoutant dans chaque remote_function cette propriété « complete ».
|
| auteur : Sébastien D. |
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 doit 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 :
propel.builder.addComments = true
|
|
| auteur : Sébastien D. |
Les tests unitaires sont intégrés dans symfony et c'est une bonne choses pour connaître l'impact de nos mises à jour sur nos modules.
Avant tout, voici quelques méthodes implémentées : | - diag($ msg )
- ok($ test , $ msg )
- is($ value1 , $ value2 , $ msg )
- isnt($ value1 , $ value2 , $ msg )
- like($ string , $ regexp , $ msg )
- unlike($ string , $ regexp , $ msg )
- cmp_ok($ value1 , $ operator , $ value2 , $ msg )
- isa_ok($ variable , $ type , $ msg )
- isa_ok($ object , $class , $ msg )
- can_ok($ object , $ method , $ msg )
- is_deeply($ array1 , $ array2 , $ msg )
- include_ok($ file , $ msg )
- fail ()
- pass ()
- skip($ msg , $ nb_tests )
- todo()
|
Les commandes utiles : | > php symfony test-unit maFonction ## Test maFonctionTest.php
> php symfony test-unit maFonction maSecondeFonction ## Execute deux test : maFonctionTest.php et maSecondeFonctionTest.php
> php symfony test-unit '*' ## Execute tout les test du répertoire test/unit
|
|
| auteur : Sébastien D. |
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 :
.settings:
no_script_name: off (ou "on" pour l'utilisation du url rewriting)
|
Lors de votre link_to, si le no_script_name est à off, alors index.php sera présent dans votre URL (utilisation de l'INFOPATH seul). Dans le cas contraire, vous ne le verrez plus.
|
| auteur : Sébastien D. |
Lorsque vous créez des articles ou des billets pour votre blog, vous voudriez changer l'aspect de vos URLs 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 à généré à partir du schema.yml "_attributes: { phpName: Articles }". Commencez par éditer le fichier lib/model/Articles.php :
class Articles extends BaseArticles
{
public function getUrlTitle()
{
$ 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 );
$ str = preg_replace(' #\&[^;]+\;# ' , ' ' , $ str );
return $ str ;
}
}
|
Maintenant, créons qui se chargera de récupérer l'id de l'article pour pouvoir l'afficher :
public function executePermalink()
{
$ 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 ();
}
|
Dans la page qui liste les articles, changer l'URL par :
link_to($article ->getTitle (), ' @article?title= ' . $article ->getStrippedTitle ())
|
Pour finir, nous allons annoncer dans le fichier routing.yml, que nous voulons utiliser l'action permalink lorsque nous voudrons afficher un article apps/monapplication/config/routing.yml :
article:
url: /articles/:title
param: { module: articles, action: permalink }
|
|
Consultez les autres F.A.Q.
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2003
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'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérêts.
Cette page est déposée à la SACD.
|