Le réseau des sites web de la célèbre marque Renault, l’un des plus grands acteurs du marché automobile, a été piraté lundi 17 mai 2010 par un groupe de hackers s’intitulant « v4 Team ». Ces derniers ont pu avoir accès sur le serveur principale hébergeant toutes les extensions des domaines renault y compris renault.co.ma.

Suite à cette attaque massive, 52 sites officiels de renault ont été défigurés, affichant un message « by Q8 H4×0r renalut 0wn3d », les attaquant semblent exploiter une faille au niveau du serveur IIS6 tournant sous Windows 2003.

Liste des sites piratés:

  • renault.uz
  • www.renault.co.uz/v4.asp
  • renault.com.pk/v4.asp
  • www.renault.com.pr/v4.asp
  • www.renault.eu/v4.asp
  • renault.sg/v4.asp
  • www.renault.tg/v4.asp
  • www.nouveautes-entreprise.renault.fr/v4.asp
  • www.megane-hatch-fleet.renault.co.uk/v4.asp
  • empresas-novidades.renault.pt/v4.asp
  • megane-sport-tourer-empresas.renault.pt/v4.asp
  • www.scenic-empresas.renault.pt/v4.asp
  • www.nuevo-megane-sport-tourer-empresas.renault.es
  • renault.com.tj
  • renault.co.ma
  • www.renault.co.tt/x.asp
  • www.renault.cg/x.asp
  • www.renault.ec/x.asp
  • www.nouveau-scenic-entreprises…
  • www.renault.com.ly/x.asp
  • www.renault.mobi/x.asp
  • www.renault.my/x.asp
  • www.renault.com.py/v4.asp
  • renault.com.ro/v4.asp
  • www.renault.gen.in/v4.asp
  • renault.hn/v4.asp
  • renault.la/v4.asp
  • http://megane-estate-entreprises.renault.fr/v4.asp
  • http://nouveautes-entreprises.renault.com/v4.asp
  • renault.com.az/x.asp
  • www.renault.co.in/x.asp
  • renault.cm/x.asp
  • renault.gy/x.asp
  • www.renault.hk/x.asp
  • www.renault.mq/x.asp
  • www.renault.kg/x.asp
  • www.renault.sn/x.asp
  • www.renault.asia/x.asp
  • http://new-models-fleet.renault.co.uk
  • renault.co.th/x.asp
  • renault.com.pt/x.asp
  • renault.co.ve/x.asp
  • new-models-fleet.renault.co.uk
  • megane-sport-tourer-fleet.rena…
  • www.renault.biz
  • http://nueva-gama-empresas.renault.es/x.asp
  • renault.ht/x.asp

  • http://nuevo-megane-berlina-empresas.renault.es/x.asp
  • http://www.megane-berlina-empresas.renault.pt/x.asp
  • renault.bo/x.asp
  • nuevo-scenic-empresas.renault.es/x.asp
  • renault.vn/x.asp
  • Partager cet article:
    • Twitter
    • Facebook
    • Google Bookmarks
    • del.icio.us
    • Netvibes
    • viadeo FR
    • Digg
    • LinkedIn
    • Slashdot
    • Sphinn
    • Mixx
    • Blogplay
    • Identi.ca
    • Print
    • Ping.fm
    • email
    • Posterous
    • Reddit
    • Yahoo! Buzz
    • PDF
    • RSS
    • Diigo
    • Fark
    • Blogosphere News
    • blogtercimlap

Joomla breadcrumbsFil d’Ariane ou « chemin de fer » appelé aussi « breadcrumbs » est l’un des éléments indispensables dans un site web, il est souvent présent avant le contenu de toute page web et permet d’indiquer aux utilisateurs leur emplacement à l’intérieur du site. dans Joomla! 1.5 le fil d’Ariane est géré par un module « mod_breadcrumbs », ce dernier est géré principalement à partir de la partie « Menus » dans l’interface d’administration. Dans ce tuto on verra comment personnaliser ce dernier en ajoutant/modifiant ou supprimant des éléments.

Ajouter un élément en fin du fil d’Ariane

$breadcrumbs =& $mainframe->getPathWay();
$breadcrumbs->addItem(JText::_('NOM_ELEMENT') , JRoute::_('URL_ELEMENT'));

Ajouter un élément au début du fil d’arian

$breadcrumbs =& $mainframe->getPathWay();
$breadcrumsNames = $breadcrumbs->_pathway ;
$new_menu = new stdClass();
$new_menu->link = JRoute::_('URL_ELEMENT');
$new_menu->name = JText::_('JNOM_ELEMENT');
array_unshift($breadcrumsNames,$new_menu);
$breadcrumbs->_pathway = $breadcrumsNames ;

Vous l’avez bien compris? $breadcrumsNames (ligne 2) permet de récupérer l’ensemble des élements du fil d’Ariane sous forme de tableau qui contient des objets stdClass, chaque objet contient deux propriétés (link et name) qui corresponde respectivement au nom de l’élément et à l’url correspondant. Si on souhaite pas que l’élément du rajouté ne soit pas cliquable il suffit de mettre la propriété link à null, ainsi vous pouvez manipuler tous les élements du tableau comme ça vous chante et par la suite l’assigner à la variable $breadcrumbs (ligne 7)

J’espère que ce petit tuto vous sera utile, n’hésitez pas à poser des questions!

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Vu le très peu de documentation que j’ai pu trouvé au sujet du plugin sfFormExtraPlugin de symfony, voici un guide rapide qui vous permettra d’installer le plugin sfFormExtraPlugin et pouvoir afficher un calendrier pour les champs de type date grâce au widget sfWidgetFormJQueryDate, voici donc les étapes à suivre:

1 – Installer le plugin sfFormExtraPlugin

En mode console, positionnez vous sur le dossier d’installation du projet et exécuter :

./symfony plugin:install sfFormExtraPlugin

2 – Télecharger et mettre en place les librairies jQuery nécessaire

Malheureusement le plugin sfFormExtraPlugin n’inclue pas les librairies externes nécessaire au fonctionnement, il faut le faire à la main!

il faut donc télécharger JQuery et JQuery UI:

  • Allez sur le site de jQuery UI
  • Dans la liste des composants déchochez toutes les cases sauf Core et Datepicker
  • Sélectionner le thème qui vous convient à droite et cliquez Télécharger

3 – Placé les fichiers téléchargés dans le dossier web et modifier le fichier view.yml

Décompresser jquery-ui-1.8custom.zip et copier les fichiers décompresser vers le dossier web ainsi:

  • js/jquery-1.4.2.min.js et js/jquery-ui-1.8.custom.min.js dans le dossier /web/js
  • css/jquery-ui-1.8.custom.css dans le dossier /web/css
  • renommer le dossier css/theme/images/ en jquery-ui-images et mettez le dans /web/images/
  • Ouvrez le fichier /web/css/jquery-ui-1.8.custom.css et remplacer « images/ » par « ../images/jquery-ui-images/ » pour corriger le chemin vers les images
  • calendar.png une petite icône qu’on affiche à coté du champs pour faire joli :p (à mettre dans /web/images/)

Maintenant il faut inclure les fichiers javascript et css dans view.yml de notre application (par exemple /apps/backend/config/view.yml) :

Ajout du fichier javascript

    javascripts:    [jquery-1.4.2.min.js, jquery-ui-1.8.custom.min.js]

Ajout du fichier css

    stylesheets:    [jquery-ui-1.8.custom.css]

4 – Mise en place du Widget dans la classe du formulaire

class PrescripteursForm extends BasePrescripteursForm
{
  public function configure()
  {
    $this->widgetSchema['date_debut'] = new sfWidgetFormJQueryDate(array('image'=>'/images/calendar.png'));
    $this->widgetSchema['date_fin'] = new sfWidgetFormJQueryDate(array('image'=>'/images/calendar.png'));
  }
}

Et le tour est joué ;) ça devrai ressembler à ça :


Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Il vous ai jamais arrivé un jour de perdre des données? Combien de temps vous il vous a fallu pour les recréer? ouais ouais c’est difficile, du chagrin et des larmes.. l’être humain n’est pas fiable, bien que le matériel moderne a de plus en plus tendance de l’être. Tous les données ont une valeur, la récréer demande du temps et beaucoup de travail d’où l’importance de la sauvegarde!

Dans ce billet on verra comment sauvegarder et restaurer vos bases de données mysql!

Quels outils?

mysql et mysqldump sont deux commandes disponibles dans mysql qui nous permettront d’effectuer une sauvegarde ou une restauration! on considère que le nom du serveur est 192.168.1.10, l’utilisateur est root et le mot de passe est p455wD

Faire un backup

Pour faire un dump de la base mabase il suffit d’exécuter la commande mysqldump:

mysqldump -h192.168.1.10 -uroot -pp455wd > backupmybase.sql

d’où backupmybase.sql et le fichier qui contiendra le backup et sera crée après exécution de la commande mysqldump

Restaurer une base de données à partir d’un backup

C’est via la commande mysql elle même :

mysql -h192.168.1.10 -uroot -pp455wd < mybackupbase.sql

les signes < et > permettent de rediriger la sortie d’une commande respectivement en lecture et écriture

Sauvegarder toutes les bases de données en une seule commande

mysqldump --user=root --password=p455wd --all-databases | gzip > all_mysql_databases.sql.gz

Créer un script de sauvegarde pour faire un backup de toutes les bases de données

Parfois on a besoin de faire des backups réguliers sans avoir à installer des outils spécialisés sur nos serveurs comme cpanel ou autres, j’ai créé pour vous ce petit script qui permet de faire cela avec la possibilité de supprimer les anciens backup datant de X jours (10 dans notre cas). Créez donc un fichier mysqlbackup.sh contenant le code suivant

# Adresse du serveur
mysql_host="192.168.1.10"
# Nom d'utilisateur mysql
mysql_user="mcherifi"
# Mot de passe mysql
mysql_pwd="p455wd"
# Répertoire de sauvegarde
backup_dir="/home/simo/"
# Nombre de jour pour suppression des anciens backups
delete_after=10

# DEBUT DU SCRIPT
date_debut_sauvegarde="$(date +"%d-%m-%Y")"
current_backupdir=$backup_dir"/"$date_debut_sauvegarde

[ ! -d $backup_dir  ] && mkdir -p $backup_dir  || :
[ ! -d $current_backupdir  ] && mkdir -p $current_backupdir  || :

find ${backup_dir}* -mtime +$delete_after -exec rm -f {} \;
for i in `mysqlshow -h $mysql_host --user=$mysql_user --password=$mysql_pwd | awk -F "^| " '{print $2}' | grep -v '^$'`
do
mysqldump -h $mysql_host --user=$mysql_user --password=$mysql_pwd --add-locks --add-drop-table $i | gzip > $current_backupdir"/"$i.sql.gz | grep '^$'
done;

et voilà le script tout prêt!

Rendre la sauvegarde périodique avec crontab

Crontab est un outil permettant d’exécuter des taches réguliers à un temps précis, on l’utilisera dans notre cas pour effectuer des sauvegarde quotidienne de nos base de données mysql!

Il existe plusieurs répertoires créés par cron permettant d’exécuter des taches régulières:

  • /etc/cron.hourly : les scripts exécutés chaque heure.
  • /etc/cron.daily : les scripts exécutés chaque jour.
  • /etc/cron.weekly : les scripts exécutés chaque semaine.
  • /etc/cron.monthly : les scripts exécutés chaque mois.

Pour exécuter notre script chaque jour, il suffit de le placer dans le répertoire /etc/cron.daily est le tour est joué! toute fois il est possible de préciser le temps exacte d’exécution du script il faut créer un fichier contab avec la commande :

crontab -e

la commande ouvrira l’éditeur de texte standard vi, si vous ne sentez pas à l’aise avec vi, consultez sa documentation officielle

après ajoutez le code suivant à la fin de votre fichier (en mettant le bon chemin du fichier backup.sh) :

0 23 * * *  /home/simo/mysqlbackup.sh

Il ne reste que quittez vi et sauvegarder notre tache avec (Echap:wq)

  • 0 23 * * * Signifie que le script sera exécuté chaque jour à 23h00
  • /home/simo/mysqlbackup.sh est le chemin où se trouve le script de sauvegarde

Cliquez ici pour télécharger le script mysqlbackup.sh, en espérant que ce tutoriel vous sera utile!

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Linux Party EMI 2010

Linux Party EMI 2010

Sous le thème « L’Open Source, Bilan Ouvertures et Horizons », et comme chaque année depuis 5 ans, les étudiants de l’École Mohammadia d’Ingénieurs organisent la 6ème Edition de Linux Party, une édition qui durera 2 jours pendant lesquels 12 ateliers de démonstration seront ouverts au public, encore un évènement incontournable qui aura le mérite de rassembler les Linux Addict et geeks du royaume!

Des membres de la communauté Ubuntu Maroc seront également présents, et contribueront à leurs tour dans cet édition!, une table ronde aura lieu et sera marquée par la présence des personnalités éminentes dans le domaine informatique et plus particulièrement par les adeptes du libre!

Je trouve que le thème « L’Open Source, Bilan Ouvertures et Horizons » est très réussi comme choix! Le déploiement des solutions libre dans les SI au Maroc est de plus en plus répondu, et permet un gains énorme en terme de coût et de performances! Plusieurs solutions OpenSource ayant prouvé leurs efficacité seront présentés et mises en pratique durant l’évènement..

Le monde du libre retrouve de plus en plus sa place au Maroc ;), Linux Party est LIBRE à tous, je vous invite donc à venir nombreux!

Source: http://www.emi.ac.ma/linuxparty/

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Photo by Foomandoonian sous Creative Common

Photo par foomandoonian

L’une des problématiques qu’on rencontre souvent sous Firefox c’est quand on installe la version la plus récente, on risque de perdre la moitié des extensions installées! pour la simple raison que ces extensions ne sont pas compatible avec la dernière version, et c’est souvent embêtant d’attendre que l’éditeur de l’extension la mets à jour pour que ça marche!

Dans ce tutorial, je vous montrerai une astuce que j’utilise très souvent pour faire marcher mes extensions « périmées » sur une nouvelle version de Firefox!

Comment ça marche?

Les extensions Firefox sont des fichiers qui portent le format .xpi, c’est enfaite juste un paquet .zip renommé en .xpi, si on le renomme et on le décompresse on trouve qu’il contient un bon nombre de fichiers, parmi ces dernier on trouve:

  • [DIR] chrome
  • [DIR] defaults
  • install.rdf (le fichier qui nous interesse)

Il se peut que vous trouvez d’autres fichiers/répertoires ça dépend de l’extension que vous avez téléchargé, pour cet exemple j’ai choisis TamperData, une de mes extensions indispensables! vous aurez donc à re-télécharger le .xpi de votre extension « périmée » depuis le site de son éditeur ou de mozdev.org puis continuant..

A quoi sert install.rdf?

Le fichier install.rdf permet de déterminer les informations concernant le plugin Firefox, ces informations sont représentées en XML sous forme de balises metadata et permettent de définir la version, auteur, versions compatibles, mise à jours etc.., et de tout ça ce qui nous importe est :

install.rdf

Vous l’avez bien compris! c’est le champ maxVersion qu’il faut modifier pour que votre extension marche sur la dernière version récemment sortie! Mettez le numéro de la dernière version ou même plus si ça vous chante, compresser à nouveau le répertoire en ext.zip et renomer le en .xpi, faite le glisser sur une fenêtre firefox, et hop ça marche!

L’avantage de cette astuce c’est que ça vous éviderai de croiser les mains pendant une demi journée (voir plus) à attendre que l’éditeur d’une extension met à jour son install.rdf, (c’est vous qui le fait à sa place :P)

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Hola les amis!

Travailler avec des tableaux en PHP est parfois embêtant, surtout quand il s’agit d’un long tableau avec une dizaine d’éléments, je préfère écrire

$obj->element1->element2->element3

plutôt que

$obj['element1']['element2']['element3']

Dans ce tutoriel on verra comment convertir une variable de type Array à un objet de type stdClass:
On considère le tableau suivant :

$tab = array(
	'key1' =>; 'Hello',
 	'key2' => array(
			'subkey1'=>'subval1',
			'subkey2'=>'subval2',
			'subkey3'=> array('foo'=>'bar')
		  )
        );

Première méthode : Type Casting

Le type casting est une méthode qui consiste à forcer le type d’une variable en la précédant du type voulu, exemple :

function array_to_object($tab)
{
  return (object)$tab ;
}

$tab = array(
	'key1' => 'Hello',
 	'key2' => array(
			'subkey1'=>'subval1',
			'subkey2'=>'subval2',
			'subkey3'=> array('foo'=>'bar')
		  )
        );

print_r(array_to_object($tab));

Cette méthode marche, mais elle n’est pas récursive, du coup seules les premiers éléments du tableau sont convertis en objets stdClass (key1,key2), le subkey3 reste toujours de type Array :

stdClass Object
(
    [key1] => Hello
    [key2] => Array
        (
            [subkey1] => subval1
            [subkey2] => subval2
            [subkey3] => Array
                (
                    [foo] => bar
                )
        )
)

Pour accéder à la valeur de la clé « foo », du sous-tableau « subkey3″ on doit faire : $tab->key2['subkey3]['foo'], ce qui est un peu chiant, on doit donc parcourir le tableau de façon récursive pour obtenir : $tab->key2->subkey3->foo!

Deuxième méthode: une fonction array_to_object()

function array_to_object($tab)
{
	$data = new stdClass ;
	if(is_array($tab) && !empty($tab))
	{
		foreach($tab as $key => $val)
		{
			if(is_array($val))
				$data->$key = array_to_object($val);
			else
				$data->$key = $val ;
		}
	}
	return $data ;
}

$tab = array(
	'key1' => 'Hello',
 	'key2' => array(
			'subkey1'=>'subval1',
			'subkey2'=>'subval2',
			'subkey3'=> array('foo'=>'bar')
		  )
        );

print_r(array_to_object($tab));

Résultat d’exécution :

stdClass Object
(
    [key1] => Hello
    [key2] => stdClass Object
        (
            [subkey1] => subval1
            [subkey2] => subval2
            [subkey3] => stdClass Object
                (
                    [foo] => bar
                )
        )
)

Et voilà, tout est objet! ainsi on peut faire : $tab->key2->subkey3->foo ce qui est plus joli à mon gout =)

Happy coding

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

ubuntu_marocMes amiiis!!
Aujourd’hui je suis très content de vous annoncer que Ubuntu Moroccan Team est désormais officiellement reconnu par la communauté Ubuntu, et oui! c’est bien le moment pour que les défenseurs du libre marocains, geeks et fan de l’opensource de disent leur mot ;)

Je tiens à féliciter tous les membres grâce auxquels ubuntu-ma a fait ce grand pas! Puis étant utilisateur d’ubuntu, j’invite tous les marocains utilisateurs et passionnés de GNU/Linux à rejoindre la communauté, participer et donner une vie à ce groupe.

J’en profite aussi pour vous annoncer L’install party de la dernière version Karmic, qui aura lieu à Eljadida le 26 Décembre 2009, n’hésitez donc pas à vous joindre ç la liste, inscrivez vous également à la liste de diffusion ubuntu-ma@lists.ubuntu.com pour rester à jour ;)

Tout ça c’est beau, Rendez-vous donc le 26 Déc, et surtout.. venez nombreux!

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

[VIDEO] : Python or PHP? that is the question!

Posted: 10th décembre 2009 by Mohammed CHERIFI in Humour
Tags: , ,

Python ou PHP pour le développement WEB? humm, c’est une question à laquelle je peux pas répondre, c’est vrai ça fait quelques mois que je m’intéresse à python, particulièrement au framework django qui me parait super élégant en terme d’ergonomie et l’implémentation du pattern MVC OO, mais bon ce n’est pas notre sujet, j’y reviendrai dans un prochain billet peut être!

Je vous invites à voir cette vidéo trop marrante réalisée par Thibault Jouannic, j’espère que vous aimerai bien :D

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap

Manipuler les paramètres de configuration dans symfony

Posted: 9th décembre 2009 by Mohammed CHERIFI in Symfony
Tags: , , ,

SymfonyDans symfony, tous les paramètres de configuration sont stockés dans des fichiers .yml (settings.yml, app.yml, module.yml, logging.yml, and i18n.yml), ceux-ci sont accessibles via une classe spéciale sfConfig, certains sont automatiquement utilisés dans le framework!
Lors du développement d’une application/module symfony, on peut définir des paramètres de configuration spécifiques à notre application, l’objectif de ce tutoriel est d’expliquer comment récupérer/modifier les valeurs de ces variables !

Exemple de fichier de configuration

On considère que le nom de l’application est frontend, et le fichier de configuration de l’application /apps/frontend/config/app.yml

all:
  categoryPages:
    maxPages: 10
  productPages:
    maxPages: 5
  generalMax: 15

Récupérer une valeur

echo sfConfig::get('app_categoryPages_maxPages'); // => 10
echo sfConfig::get('app_productPages_maxPages'); // => 5
echo sfConfig::get('app_generalMax'); // => 15

Symfony utilise le format YAML pour tous ses fichiers de configuration grâce à sa syntaxe simple et efficace, les données sont représentées par une combinaison de listes, tableaux (de hachage) et données scalaires.

L’accès à une variable se fait via la méthode get() de la classe sfConfig, il suffit d’indiquer le chemin permettant d’accéder à la variable, on respectant ces petites règles :

  • Le premier paramètre corrépond au nom d’un fichier de configuration sans le .yml (settings, app, module, logging, i18n..), ces fichiers se trouve dans le répertoire /apps/NOMAPPLICATION/config/
  • Il ne faut pas mentionner le « all » ou « default » dans la méthode sfConfig::get()
  • Séparez les paramètres par des « _ » en respectant arborescence selon le fichier .yml
  • Il est préférable de ne pas utilisé des « _ » dans le nom des paramètres pour éviter un éventuel conflit

Modifier la valeur d’un paramètre « on the fly »

La méthode set de la classe sfConfig permet la modification de la valeur d’un paramètre de configuration, cette modificationn’est pas permanente, et n’affecte pas le fichier de configuration concerné:
Exemple :

sfConfig::set('sf_timeout', 86400);

Modifier un paramètre dans le fichier yml

Par défaut, symfony ne gère pas l’écriture dans les fichiers de configuration, il n’y a donc pas de méthode save() dans la classe sfConfig, néanmoins il fourni d’autre méthodes permettant la réalisation de cette tache:

Exemple :

Modifier app_categoryPages_maxPages dans /apps/frontend/config/app.yml

all:
  categoryPages:
    maxPages: 10
  productPages:
    maxPages: 5
  generalMax: 15

Dans actions.class.php

$app_config_file = sfConfig::get('sf_app_config_dir')."/app.yml";
$config_values = sfYaml::load($app_config_file);
$config_values['all']['categoryPages']['imap_maxPages'] = 20; // à titre d'exemple
$content = sfYaml::dump($config_values);
file_put_contents($app_config_file, $content);

sfYaml::load() retourne un tableau associatif contenant les paramètres de configuration du fichier passé en paramètre, sfYaml::dump() permet de génerer le code YAML à partir d’un tableau sur-lequel on a effectué nos modifications. sans oublier que le chemin du fichier en question doit être inscriptible (+w) pour permettre l’écriture des nouveaux paramètres

Pourquoi symfony ne gère pas l’écriture dans les fichiers YML?

Je vous rassure, ce n’est pas un oubli ;) au début ça m’a fait un peu bizarre mais voilà pourquoi :

  • Dans symfony, les paramètres de configuration ne découlent pas d’un seul fichier mais de plusieurs fichiers yml (en cascade), on saura pas lequel des fichiers modifier
  • Sur un serveur de développement, tous les fichiers YAML sont version-nés, si ceux-ci sont édités, il y aura des conflits au moment de mettre à jour par le biais du SVN/GIT
  • Les fichiers YAML ne sont pas destinés à être modifiés dynamiquement surtout dans un projets collaboratif (sauf cas particulier)

Un grand merci à Charles, Jérôme et François qui m’ont éclairci les idées à ce sujet =)

Voilà, ce billet touche à sa fin, à très bientôt ;)

Partager cet article:
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Netvibes
  • viadeo FR
  • Digg
  • LinkedIn
  • Slashdot
  • Sphinn
  • Mixx
  • Blogplay
  • Identi.ca
  • Print
  • Ping.fm
  • email
  • Posterous
  • Reddit
  • Yahoo! Buzz
  • PDF
  • RSS
  • Diigo
  • Fark
  • Blogosphere News
  • blogtercimlap