Symfony configuration. généralités La configuration de symfony est stockée dans des fichiers.yml...

Preview:

Citation preview

Symfony

configuration

généralités

• La configuration de symfony est stockée dans des fichiers .yml (YAML) par défaut

• Un fichier de configuration peut se trouver au niveau du projet de l’application ou du module

• Possibilité de centralisé un ensemble de configuration dans de des environnements

• Les valeurs définies dans les fichiers de configuration sont accessibles via PHP

• Le code PHP est possible dans les fichiers .yml

La configuration dans symfony

• Puissant : Presque tous les aspects pouvant être gérés par les fichiers de configurations le sont.

• Simple : Beaucoup d’aspect configurables ne sont pas mentionnés dans une application standard, puisqu’ils ont rarement besoin d’être changés.

• Facile : Les fichiers de configuration sont faciles à lire, à modifier, et à créer par le développeur.

• Personnalisable: Le langage de configuration par défaut est YAML, mais peut être INI, XML, ou n’importe quel langage que le développeur préfère.

• Rapide : Les fichiers de configurations ne sont jamais interprétés par l’application mais par le système de configuration, qui les compile en morceaux rapide d’exécution de code pour le serveur PHP.

YAML

• http://www.yaml.org/ • sérialisation de données • langage simplifié de description de données

en XML • Efficace pour les représentation de liste et

tableaux associatifs …• L’indentation (2 espaces -> gare aux

tabulations!!) fait partie du langage!• # pour le commentaire

YAML - string

• Chaîne de caractères non standard sont à entourer par des simples quotes

error1: Ce champ est obligatoire error2: ' Ce champ est obligatoire ‘error3: 'Don''t leave this field blank' error4: ‘error : Don''t leave this field blank'• Chaîne de caractères multiligne (sans line break)accomplishment: > Mark set a major league home run record in 1998. • Chaîne de caractères multiligne (avec line break)stats: | 65 Home Runs 0.278 Batting Average

YAML – tableau

• Syntaxe courte pour les tableaux

players: [ Mark McGwire, Sammy Sosa, Ken Griffey ]

• Syntaxe étendue pour les tableaux

players:

- Mark McGwire

- Sammy Sosa

- Ken Griffey

YAML – tableau associatif

• Syntaxe courte pour les tableaux associatifs mail: { webmaster: webmaster@example.com, contact: contact@example.com }

• Syntaxe étendues pour les tableaux associatifs

mail:

webmaster: webmaster@example.com

contact: contact@example.com

• Syntaxe courte incorrecte mail: {webmaster:webmaster@example.com,contact:contact@example.com}

Ce tableau PHP

$house = array( 'family' => array(

'name' => 'Doe', 'parents' => array('John', 'Jane'), 'children' => array('Paul', 'Mark', 'Simone')

), 'address' => array(

'number' => 34, 'street' => 'Main Street', 'city' => 'Nowheretown', 'zipcode' => '12345‘

) );

S’écrit en yaml

house: family: name: Doe parents: - John - Jane children: - Paul - Mark - Simone address: number: 34 street: Main Street city: Nowheretown zipcode: "12345"

Ou encore …

house:

family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }

address: { number: 34, street: Main Street, city: Nowheretown, zipcode: "12345" }

• Les catégories permettent de regrouper des paires clé: valeurall:

.general:

tax: 19.6

Ca vient en l’utilisant don’t panic!!

Vue globale configuration d’un projet symfony

• config.php: premier fichier exécuté par une requête ou une commande. Il contient le chemin des fichiers du framework (perosnnalisable).

• databases.yml: les paramètres de connexion à la base de données (serveur, login, password, nom de la base, …). Ils peuvent être modifiés au niveau application.

• properties.ini: paramètres utilisés par l’outil en ligne de commande

• rsync_exclude.txt: spécifie les répertoires devant êtres exclus des synchronisations entre serveurs

• schema.yml & propel.ini: fichiers de configurations d’accès aux données utilisés par Propel (la couche ORM de symfony). – schema.yml contient une représentation du modèle de données

relationnel du projet. – propel.ini est automatiquement généré

Schéma de BDD

propel: blog_article: _attributes: { phpName: Article } id: title: varchar(255) content: longvarchar created_at: blog_comment: _attributes: { phpName:

Comment } id: article_id: author: varchar(255) content: longvarchar created_at:

config/schema.yml

config/database.yml

all: propel: class: sfPropelDatabase param: phptype: mysql host: localhost database: blog username: root password: encoding: utf8

blog

•« propel » dans nom de la connexion à la base de données

•Possibilité de connexion différentes par environnement

Syntaxe standard du schéma

propel: blog_article: _attributes: { phpName: Article } id: title: varchar(255) content: longvarchar created_at: blog_comment: _attributes: { phpName:

Comment } id: article_id: author: varchar(255) content: longvarchar created_at:

config/schema.yml

reconnu comme clé primaire auto-incrémentée

conditionne le nom de l’objet php associé. Si aucun nom d’origine version camelCase

colonnes finissant par _id considérées comme clés étrangères table correspondante déterminée par la première partie du nom de la colonne

updated_at ou created_at automatiquement définis comme times tamp

•attribut type : boolean, integer, float, date, varchar(size), longvarchar, etc …•autres attributs (par défaut, obligatoire, etc…) écrire ces attributs comme un ensemble de clé:valeur

La classe!!

• crééer les classes du modèle de la couche ORM symfony propel-build-model

• Classes de base générées dans lib/model/om/ – BaseArticle.php – BaseArticlePeer.php – BaseComment.php – BaseCommentPeer.php

• Classes réelles générées dans lib/model– Article.php – ArticlePeer.php – Comment.php – CommentPeer.php

More exciting than YAML DBDesigner

• Création de schéma de BDD en mode graphique

• Possibilité de convertir le schéma visuel en schema.yml

• Application non maintenue, qui ne compile pas sous linux – http://www.strangebuzz.com/index.php/2008/09/08/36-new-

symfony-11-plugin-tutorial-sfdb4topropelplugin– http://mazenod.fr/blog/un-petit-batch-pour-symfony.html– http://mazenod.fr/blog/commencer-un-projet-symfony.html– http://mazenod.fr/blog/dbdesigner-out-of-memory.html– http://mazenod.fr/blog/utiliser-dbdesigner-avec-l-i18n-de-symfony.html

Vue globale configuration d’une application symfony• app.yml: variables globales définissant la logique applicative

spécifique à une application, n’ayant pas besoin d’être stockées dans une base de données. Il est vide par défaut.

• config.php: démarre en incluant le fichier config.php du projet. • factories.yml: permet d’utiliser le framework avec des classes

personnalisées• filters.yml: Les filtres sont des portions de code exécutés à

chaque requête. Définitions de la séquence de filtres. Peut être modifié au niveau module

• logging.yml: définit le niveau de détails devant être enregistré dans les logs

• routing.yml: Les règles de routage, permettant de transformer les urls illisibles et « unbookmarkable » en de belles urls

Vue globale configuration d’une application

• settings.yml: paramètres principaux d’une application symfony, activation de l’internationalisation, langage par défaut, timeout d’une requête, le cache actif ... En changeant une seule ligne dans ce fichier, vous pouvez interrompre

• view.yml: structure de la vue par défaut (nom du layout, titre, tags meta, css & js par défaut …). Peut être modifié au niveau module

• i18n.yml: paramètres généraux de traduction, comme la culture par défaut pour les traductions, traductions fichiers ou base de données et leurs formats.

• i18n/: dictionnaires basiques, donnant une traduction pour chaque phrases. Utilisées dans le template de l’application de sorte que les pages affichent le texte traduit lorsque l’utilisateur change de langue.

Vue globale configuration d’une application

• Fichiers de conf du framework, redéfinissables• autoload.yml: paramètres de la fonctionnalité d’auto

chargement. • constants.php: structure de fichier par défaut de

l’application• bootstrap_compile.yml: liste des classes à inclure lors du

démarrage de l’application• core_compile.yml: liste des classes à inclure pour traiter

une requête – Ces classes sont en fait concaténées dans un fichier PHP optimisé

sans commentaires (accélère l’exécution)• config_handlers.yml: permet d’ajouter ou de modifier les

gestionnaires utilisés pour traiter chaque fichier de configuration

• php.yml: vérifie les variables du php.ini sont correctement définies et permet de les modifier, si nécessaire

Vue globale configuration d’un module

• generator.yml: pour les modules générés à partir de la table d’une base de données (scaffoldings and administrations), définit comment l’interface affiche les lignes et les champs, et quelles interactions sont proposées à l’utilisateur (filtres, ordonnancement, boutons, …)

• module.yml: contient des paramètres personnalisés spécifique à un module (équivalent à app. yml, mais au niveau d’un module) et aux actions.

• security.yml: définit la restriction d’accès aux actions. Permet de spécifier qu’une page peut être vue seulement par les utilisateurs enregistrés ou par un sous-ensemble d’utilisateur enregistrés avec des droits spéciaux.

• view.yml: contient la configuration pour les vues pour une ou toutes les actions du module. Il modifie le fichier view.yml de l’application

• Data validation files: situés dans le répertoire validate/ au lieu de config/, les fichiers YAML de validation de données, sont utilisés pour contrôler les données entrées dans les formulaire. Ils ont pour nom le nom de l’action

Les environnements – en bref

• partagent le même code PHP • Peuvent avoir des configurations différentes• symfony fournit trois environnements par défaut:

– Production (prod) • http://localhost/app_prod.php/ ou http://localhost/app.php• enregistre les erreurs

– test (test) • http://localhost/app_test.php/• enregistre les alertes et les erreurs

– développement (dev) • http://localhost/app_dev.php/• l’accélération du cache est désactivé • La debug barre est activée

Conifguration des environnements

# Production environment settings prod: ... # Development environment settings dev: ... # Test environment settings test: ... # Custom environment settings myenv: ... # Settings for all environments all: ...

Configuration en cascade

• La même configuration peut être définie plusieurs fois

• myapp/config/view.yml default: https_metas: content-type: text/html

• myapp/modules/rss/config/view.yml default: https_metas: content-type: text/xml

Accéder à la configuration à partir du code PHP

• La classe sfConfig permet d’accéder à la configuration

parameter = sfConfig::get('param_name', $default_value);

sfConfig::set('param_name', $value);

• Apps/myapp/config/app.ymlall:

version: 1.5

• Sera accessible comme suitecho sfConfig::get('app_version');

Accéder à la configuration à partir du code PHP II

• Certaines variables de configuration symfony sont accessible via PHP

• settings.yml all:

.settings:

available: on

path_info_array: SERVER

• Accessibles comme suitsfConfig::set('sf_available’, false);

sfConfig::get('sf_path_info_array’);

• N.B. : les catégories n’apparaissent pas dans le chemin de la variable

Accéder dynamiquement à la configuration dans le code PHP

• autoload.yml autoload: symfony: name: symfony path: %SF_SYMFONY_LIB_DIR% recursive: on exclude: [vendor]

• Pour une variable de app.yml%APP_LOCATION_OF_VARIABLE% ou<?php echo sfConfig::get(‘app_location_of_variable'). ''\n'' ?>

Recommended