<?xml version="1.0" encoding="UTF-8" ?>
	<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
		<channel>
			<title>M@ckerT - Tuto Symfony</title>
			<link>http://jonathan.demoutiez.net/Accueil/index/in/rss</link>
			<description>Tout sur l'actualite, informatique; robotique; high-tech, sur la programmation Java; PHP; C/C++, l'intelligence artificielle, venez decouvrir des inventions toujours plus surprenantes, ce site regroupe de nombreux services disponibles FTP; WAP;...</description>
			<language>fr</language>
			<copyright>Copyright &amp;copy;2 M@ckerT. </copyright>
			<generator>M@ckerT.</generator>
			<docs>http://mackert.ath.cx/</docs>
			<ttl>20</ttl>
	
							<item>
								<title>Base de données</title>
								<link>http://jonathan.demoutiez.net/Symfony/40-base-de-donnees</link>
								<description>Le framework nous offre une souplesse d&amp;rsquo;utilisation et d&amp;rsquo;acc&amp;egrave;s &amp;agrave; la base de donn&amp;eacute;es qui vous fera gagner &amp;eacute;norm&amp;eacute;ment de temps !   	La base de donn&amp;eacute;es va &amp;ecirc;tre d&amp;eacute;crite dans un fichier de configuration : config/schema.yml.   	Nous allons d&amp;rsquo;abord diff&amp;eacute;rencier deux points, soit votre mod&amp;egrave;le de donn&amp;eacute;es :   	est d&amp;eacute;j&amp;agrave; construit et nous ne pouvons pas le modifier : nous perdrons quelques atouts de Symfony;n&amp;rsquo;est pas encore d&amp;eacute;finit ou nous pouvons la re-modeler.   	Noms de champs sp&amp;eacute;cifiques   	id : Si un champ d&amp;rsquo;une table se nomme id alors il sera automatiquement consid&amp;eacute;r&amp;eacute; comme la cl&amp;eacute; primaire de la table.   	created_at &amp;amp; updated_at : Vous pouvez appeler un champ de type datetime`created_at ou updated_at pour que Symfony g&amp;egrave;re ces donn&amp;eacute;es automatiquement lors de l&amp;rsquo;insertion ou de la mise &amp;agrave; jour de donn&amp;eacute;es.   	Syst&amp;egrave;me relationnel   	Symfony va nous permettre de g&amp;eacute;rer tr&amp;egrave;s simplement le syst&amp;egrave;me relationnel de notre mod&amp;egrave;le de donn&amp;eacute;es.   	Automatiquement si nous appelons nos champs comme il faut :   	Si un champs se nomme NOM_TABLE_EXISTANTE_id alors il sera automatiquement consid&amp;eacute;r&amp;eacute; comme la cl&amp;eacute; &amp;eacute;trang&amp;egrave;re de la table NOM_TABLE_EXISTANTE. Ainsi le syst&amp;egrave;me relationne sera repris automatiquement dans notre syst&amp;egrave;me objet (ORM).   	Ecriture du sch&amp;eacute;ma   	Ma base n&amp;rsquo;est pas encore cr&amp;eacute;&amp;eacute;e :   Nous allons &amp;eacute;diter le fichier `config/schema.yml` comme suit:   propel:   nom_table:    id:    created_at:    titre: varchar(255)    texte: longvarchar  nom_table_2:    id:    created_at:    updated_at:    nom_table_id:    texte: varchar(255)    description: longvarchar    chiffre: int  	Une fois que nous avons d&amp;eacute;crit notre sch&amp;eacute;ma SQL, nous allons pouvoir g&amp;eacute;n&amp;eacute;rer automatiquement les tables en base et la g&amp;eacute;n&amp;eacute;ration des objets (cf: le prochain article l&amp;rsquo;ORM)) :     &amp;gt;symfony propel-build-all  	Ma base est d&amp;eacute;j&amp;agrave; cr&amp;eacute;&amp;eacute;e   	Si notre base est d&amp;eacute;j&amp;agrave; &amp;eacute;crite nous pouvons g&amp;eacute;n&amp;eacute;rer ce fichier automatiquement via la commande :     &amp;gt;symfony propel-init-schema  	Nous pouvons ensuite y effectuer quelques modifications pour y pr&amp;eacute;ciser notre syst&amp;egrave;me relationnel par exemple :     propel:   nom_table:    id:    created_at:    titre:varchar(255)    texte: longvarchar  nom_table_2:    id:    created_at:    updated_at:    texte: varchar(255)    description: longvarchar    chiffre: int    _foreignKeys:      nom_table:         _attributes: { onDelete: cascade }         references:           - {local: nom_cle_etrangere, foreign: id }  	Ici nous n&amp;rsquo;allons pas cr&amp;eacute;er les tables en base puisqu&amp;rsquo;elles existent d&amp;eacute;j&amp;agrave;, nous allons donc juste g&amp;eacute;n&amp;eacute;rer les objets via l&amp;rsquo;ORM :     &amp;gt;symfony propel-build-model</description>
								<pubDate>2007-08-27 12:52:19</pubDate>
							</item>
					
							<item>
								<title>Entrons dans le monde de symfony</title>
								<link>http://jonathan.demoutiez.net/Symfony/39-entrons-dans-le-monde-de-symfony</link>
								<description>Jusqu&amp;rsquo;ici nous avons vu les grands points de Symfony mais surtout son fonctionnement (application / modules / actions / vues; partials / helpers).   	Mais symfony est un framework et nous offre donc une multitude d&amp;rsquo;helpers et de fonctions &amp;agrave; disposition qui vont nous simplifier la vie.   	De nombreuses fonctions de Symfony permettent de g&amp;eacute;n&amp;eacute;rer une balise HTML.   	Les fonctions les plus courantes   	Liens HTML   	Puisque symfony utilise de l&amp;rsquo;url rewriting nous passerons syst&amp;eacute;matiquement par les fonctions de symfony pour g&amp;eacute;n&amp;eacute;rer des liens. Ceci permettra de formater automatiquement les liens :   	Accueil/index?var1=value1    	deviendra automatiquement :   	Accueil/index/var1/value1   	link_to(TEXTE, LIEN, PROPRIETES) : g&amp;eacute;n&amp;eacute;re un simple lien html. Le troisi&amp;egrave;me param&amp;egrave;tre est une chaine de caract&amp;egrave;res qui peut contenir tous les attributs possibles d&amp;rsquo;une balise A_ sous cette forme : _target=nom, popup=true, alt=text     link_to(&amp;#39;clic ici&amp;#39;, &amp;#39;PUB/index?pub=2&amp;#39;, &amp;#39;popup=true&amp;#39;)  	Liens &amp;amp; Javascript   	En faisant appel &amp;agrave; l&amp;rsquo;helper `Javascript` nous pourrons utiliser :   	link_to_function(TEXTE, CODE_JAVASCRIPT) qui g&amp;eacute;n&amp;eacute;re un lien faisant appel &amp;agrave; du code javascript onclick.     link_to(&amp;#39;clic ici&amp;#39;, &amp;#39;alert(\&amp;#39;BONJOUR !\&amp;#39;)&amp;#39;) ?&amp;gt;  	link_to_remote(TEXTE, array()), fait appel &amp;agrave; une page en ajax.     link_to_remote(        &amp;#39;clic ici&amp;#39;,        array(            &amp;#39;url&amp;#39; =&amp;gt; &amp;#39;MODULE/ACTION&amp;#39;,            &amp;#39;update&amp;#39; =&amp;gt; &amp;#39;div_id_1&amp;#39;,            &amp;#39;loading&amp;#39; =&amp;gt; &amp;#39;alert(\&amp;#39;Debut\&amp;#39;)&amp;#39;,            &amp;#39;complete&amp;#39; =&amp;gt; &amp;#39;alert(\&amp;#39;FIN\&amp;#39;)&amp;#39;,            &amp;#39;script&amp;#39; =&amp;gt; true            &amp;#39;confirm&amp;#39; =&amp;gt; &amp;#39;Etes vous sur ?&amp;#39;        )    )  	loading permet de sp&amp;eacute;cifier du code javascript &amp;agrave; ex&amp;eacute;cuter avant l&amp;rsquo;appel ajax, et complete apr&amp;egrave;s l&amp;rsquo;appel.   	update est l&amp;rsquo;id de l&amp;rsquo;&amp;eacute;l&amp;eacute;ment HTML &amp;agrave; mettre &amp;agrave; jour.   	confirm permet de g&amp;eacute;r&amp;eacute; automatiquement une petite alert de confirmation.   	ATTENTION : si vous ne mettez pas script &amp;agrave; true, le code Javascript r&amp;eacute;cup&amp;eacute;r&amp;eacute; en ajax ne sera pas execut&amp;eacute; !   	Remarque : Cet helper offre de tr&amp;egrave;s nombreuses fonctions (tel que les fonctions de Drag And Drop par exemple) que vous trouverez dans la documentation officielle.   	Image         &amp;eacute;quivaut &amp;agrave; :    image_tag(&amp;#39;image&amp;#39;);  	Remarque : Certaines extensions seront prises en compte automatiquement (&amp;lsquo;jpg&amp;rsquo;, &amp;lsquo;png&amp;rsquo;) sinon pr&amp;eacute;cisez la.   	L&amp;rsquo;image est automatiquement recherch&amp;eacute;e dans le dossier web/images, mais nous pourons acc&amp;egrave;der &amp;agrave; d&amp;rsquo;autres dossiers :   	/images2/image ou encore sous_dossier_images/image   	Formulaire       form_tag(&amp;#39;MODULE/ACTION&amp;#39;, &amp;#39;method=post&amp;#39;);  Saisissez :   label_tag(&amp;#39;input1&amp;#39;, &amp;#39;Saisissez : &amp;#39;)    input_tag(&amp;#39;input1&amp;#39;, &amp;#39;valeur&amp;#39;)    submit_tag(&amp;#39;Ok&amp;#39;)  	La balise select     select_tag(        &amp;#39;NAME&amp;#39;,        options_for_select(                array(                    &amp;#39;value&amp;#39; =&amp;gt; &amp;#39;affiche&amp;#39;,                    &amp;#39;value1&amp;#39; =&amp;gt; &amp;#39;affiche1&amp;#39;                ),                &amp;#39;valeur_par_defaut&amp;#39;        ),        &amp;#39;size=2&amp;#39;)  	Remarque : Vous pouvez sp&amp;eacute;cifier des &amp;lsquo;optgroup&amp;rsquo; :     options_for_select(            array(                &amp;#39;groupe 1&amp;#39; =&amp;gt; array(),                &amp;#39;value&amp;#39; =&amp;gt; &amp;#39;affiche&amp;#39;,                &amp;#39;groupe 2&amp;#39; =&amp;gt; array(),                &amp;#39;value1&amp;#39; =&amp;gt; &amp;#39;affiche1&amp;#39;            ),            &amp;#39;valeur_par_defaut&amp;#39;  )  	De nombreuses autres fonctions associ&amp;eacute;es sont disponibles, ce qui rend le tout tr&amp;egrave;s intuitif.</description>
								<pubDate>2007-08-13 15:00:32</pubDate>
							</item>
					
							<item>
								<title>Helper</title>
								<link>http://jonathan.demoutiez.net/Symfony/38-helper</link>
								<description>Un helper va comme le partial permettre de g&amp;eacute;n&amp;eacute;raliser des bouts de vues, mais il ne contient pas directement une vue mais des fonctions qui retourneront les bouts de vue.   	Ces fonctions correspondent &amp;agrave; un tout petit bout de vue contrairement &amp;agrave; un partial qui peut contenir beaucoup d&amp;rsquo;&amp;eacute;l&amp;eacute;ments.   Un helper pourra d&amp;eacute;finir par exemple des fonctions  	qui vont attribuer des couleurs au titre selon des crit&amp;egrave;res de niveaux;qui vont d&amp;eacute;finir les options pour le select d&amp;rsquo;un formulaire (avec appel au model);... .   	Des fonctions comme link_to_remote; draggable_element; ... appartiennent &amp;agrave; l&amp;rsquo;helper Javascript.   	Aussi il est possible que l&amp;rsquo;on ai besoin de faire du calcul ou de l&amp;rsquo;appel au model pour g&amp;eacute;n&amp;eacute;rer un bout de vue, nous ferons appel &amp;agrave; l&amp;rsquo;utilisation d&amp;rsquo;un helper dans ce cas pour respecter notre syst&amp;egrave;me MVC.   	D&amp;eacute;finir un helper   	Les helpers d&amp;rsquo;une application vont se situer dans le dossier apps/NOM_APP/lib/helper/ (ou dans le dossier lib d&amp;rsquo;un module pour plus de sp&amp;eacute;cificit&amp;eacute;s)   Un helper Menu aura pour nom de fichier le nom du helper suivit du mot cl&amp;eacute; Helper, exemple :   menuHelper.php  	Faire appel &amp;agrave; un helper   	L&amp;rsquo;appel &amp;agrave; un helper se fait donc &amp;eacute;videment dans une vue (ou encore un partial).   	Nous pourrons appeler des helpers via la fonction use_helper :     use_helper(&amp;#39;Menu&amp;#39;)    On peut &amp;eacute;galement faire appel &amp;agrave; plusieurs helpers en m&amp;ecirc;me temps :    use_helper(&amp;#39;Menu&amp;#39;, &amp;#39;helper2&amp;#39;, ...)  	Une fois un helper appel&amp;eacute; nous aurons acc&amp;egrave;s aux fonctions d&amp;eacute;finies dans celui-ci.</description>
								<pubDate>2007-08-08 11:32:21</pubDate>
							</item>
					
							<item>
								<title>Partial</title>
								<link>http://jonathan.demoutiez.net/Symfony/37-partial</link>
								<description>Symfony est un framework dit &amp;laquo; DRY &amp;raquo; (Don&amp;rsquo;t Repeat Yourself), il int&amp;eacute;gre un syst&amp;egrave;me de partial et d&amp;rsquo;helper qui vont nous permettre de g&amp;eacute;n&amp;eacute;raliser des &amp;ldquo;bouts de vues&amp;rdquo;.Partial   	Un partial se place dans le dossier templates du module le concernant. Le nom du fichier commencera syst&amp;eacute;matiquement par le caract&amp;egrave;re `_`, exemple si on le nomme : `je_suis_un_partial`, le fichier se nomme :   _je_suis_un_partial.php  	Un partial va pouvoir &amp;ecirc;tre appel&amp;eacute; de n&amp;rsquo;importe quelle vue via l&amp;rsquo;instruction :     include_partial(&amp;#39;je_suis_un_partial&amp;#39;);  	Cette instruction appelle le partial et le &amp;ldquo;cherche&amp;rdquo; dans le module actuel. Dans le cas ou vous voulez appeler le partial d&amp;rsquo;un autre module, vous devez le pr&amp;eacute;ciser :     include_partial(&amp;#39;NOM_MODULE/je_suis_un_partial&amp;#39;)  	A quoi &amp;ccedil;a sert ?   	Si par exemple vous avez un formulaire qui permet &amp;agrave; l&amp;rsquo;utilisateur de saisir des informations lors de son inscription, souvent vous avez ce m&amp;ecirc;me formulaire qui permet &amp;agrave; l&amp;rsquo;utilisateur de venir les modifier.   	Pl&amp;ucirc;tot que d&amp;rsquo;&amp;eacute;crire ce formulaire dans le fichier &amp;lsquo;modules/inscription/templates/inscriptionSuccess.php&amp;rsquo;    	et de le recopier dans   	&amp;lsquo;modules/membre/templates/modifierInfosSuccess.php&amp;rsquo;.   	Nous allons &amp;eacute;crire uniquement ce formulaire dans le partial &amp;lsquo;modules/inscription/templates/_formulaire.php&amp;rsquo;.   	Evidement nous pouvons passer des valeurs &amp;agrave; un partial, voici comment proc&amp;eacute;der :       include_partial(        &amp;#39;NOM_MODULE/je_suis_un_partial&amp;#39;,        array(            &amp;#39;nom_var1&amp;#39; =&amp;gt; val1,            &amp;#39;nom_var2&amp;#39; =&amp;gt; val2,            ...        )    );  	</description>
								<pubDate>2007-08-06 10:57:48</pubDate>
							</item>
					
							<item>
								<title>Résumons / Essayons</title>
								<link>http://jonathan.demoutiez.net/Symfony/36-resumons-essayons</link>
								<description>Essayons avec un exemple tout simple pour bien comprendre l&amp;rsquo;int&amp;eacute;raction modules / actions / vues.   	Commen&amp;ccedil;ons par g&amp;eacute;n&amp;eacute;rer notre projet, notre premi&amp;egrave;re application et notre premier module :     $&amp;gt; symfony init-project mon_premier_projet_symfony  $&amp;gt; symfony init-app front  $&amp;gt; symfony init-module front Accueil  	On d&amp;eacute;finit notre module et action par d&amp;eacute;faut :   apps/front/config/routing.yml # default ruleshomepage:  url:   /  param: { module: Accueil, action: index }// ...  Nous allons d&amp;eacute;finir notre action index :         apps/front/modules/Accueil/actions/actions.class.php class AccueilActions extends sfActions{  public function executeIndex(){    // Aucun traitement pour le moment...  }         apps/front/modules/Accueil/templates/indexSuccess.php   Bienvenue...&amp;lt;br /&amp;gt;  &amp;lt;br /&amp;gt;  Ici nous sommes dans le module Accueil et l&amp;#39;action index.  D&amp;eacute;finissons notre action autre, on rajoute la m&amp;eacute;thode executeAutre,         apps/front/modules/Accueil/actions/actions.class.php   public function executeAutre(){    // Aucun traitement pour le moment...  }  apps/front/modules/Accueil/templates/autreSuccess.php   Voici mon autre action...  	Rendez-vous sur l&amp;rsquo;url : http://MON_DOMAINE/ ou http://MON_DOMAINE/Accueil/index et http://MON_DOMAINE/Accueil/autre   	Vous pouvez essayer de g&amp;eacute;n&amp;eacute;rer un deuxi&amp;egrave;me module et une deuxi&amp;egrave;me application et y faire vos essais.</description>
								<pubDate>2007-08-03 14:37:30</pubDate>
							</item>
					
							<item>
								<title>Récupérer dans la vue une variable définie dans l’action</title>
								<link>http://jonathan.demoutiez.net/Symfony/35-recuperer-dans-la-vue-une-variable-definie-dans-l-action</link>
								<description>Il nous sera bien sur indispensable de passer des variables de notre action &amp;agrave; notre vue. Pour cela il suffit de passer la variable en attribut de classe.   	Exemple :   public function executeIndex(){  ...  $cout_en_francs = 1;  $this-&amp;gt;setVar(&amp;#39;cout_en_euros&amp;#39;, $cout_en_francs * 6.55);  ...}  	Ici, dans la vue nous aurons acc&amp;egrave;s &amp;agrave; la variable cout_en_euro mais pas &amp;agrave; la variable cout_en_francs :   indexSuccess.php :   Le cout est de &amp;lt;?= $cout_euros ?&amp;gt; &amp;amp;euro;</description>
								<pubDate>2007-08-02 13:42:21</pubDate>
							</item>
					
							<item>
								<title>Comment sont définies les vues ?</title>
								<link>http://jonathan.demoutiez.net/Symfony/34-comment-sont-definies-les-vues</link>
								<description>Les vues d&amp;rsquo;un module sont stock&amp;eacute;es dans le dossier templates.   	La vue correspondante &amp;agrave; une action doit avoir le m&amp;ecirc;me nom que celui de l&amp;rsquo;action suivi du mot cl&amp;eacute; Success.   	Vous trouverez donc par d&amp;eacute;faut dans un module la vue de l&amp;rsquo;action index qui est indexSuccess.php (action g&amp;eacute;n&amp;eacute;r&amp;eacute;e par d&amp;eacute;faut).</description>
								<pubDate>2007-08-02 13:41:54</pubDate>
							</item>
					
							<item>
								<title>Comment sont définies les actions ?</title>
								<link>http://jonathan.demoutiez.net/Symfony/33-comment-sont-definies-les-actions</link>
								<description>Les actions vont &amp;ecirc;tre d&amp;eacute;finies sous formes de m&amp;eacute;thodes de la classe actions (du dossier actions de notre module).   	Rappel : Lors de la g&amp;eacute;n&amp;eacute;ration d&amp;rsquo;un module, l&amp;rsquo;action index est g&amp;eacute;n&amp;eacute;r&amp;eacute;e par d&amp;eacute;faut.   	Le nom d&amp;rsquo;une m&amp;eacute;thode d&amp;rsquo;action commence syst&amp;eacute;matiquement par le mot cl&amp;eacute; execute :     public function executeIndex(){  }&amp;nbsp;  Remarque : L&amp;rsquo;instruction :   $this-&amp;gt;forward(&amp;#39;default&amp;#39;, &amp;#39;index&amp;#39;) (inscrite &amp;agrave; la g&amp;eacute;n&amp;eacute;ration dans l&amp;rsquo;action index) est une redirection  vers le module et l&amp;rsquo;action pr&amp;eacute;cis&amp;eacute;s (d&amp;eacute;fault est un module int&amp;eacute;gr&amp;eacute; dans Symfony).  La m&amp;eacute;thode forward permet d&amp;rsquo;effectuer une redirection &amp;lsquo;interne&amp;rsquo; (invisible pour l&amp;rsquo;utilisateur), &amp;agrave; ne pas confondre avec la m&amp;eacute;thode redirect qui elle est une rediction envoy&amp;eacute; au client (elle renvoie par d&amp;eacute;faut le code 302).  	Vous l&amp;rsquo;avez compris, la m&amp;eacute;thode executeNOM_ACTION correspond au controleur de l&amp;rsquo;action (mod&amp;egrave;le MVC). Il pourra faire appel au mod&amp;egrave;le pour r&amp;eacute;cup&amp;eacute;rer des valeurs en base; effectuer des calculs; ... .   	La vue correspondante &amp;agrave; l&amp;rsquo;action sera ensuite appel&amp;eacute;e (A suivre dans le prochain post).</description>
								<pubDate>2007-08-01 15:25:53</pubDate>
							</item>
					
							<item>
								<title>Configuration d'un module</title>
								<link>http://jonathan.demoutiez.net/Symfony/32-configuration-d-un-module</link>
								<description>Comme expliqu&amp;eacute; pr&amp;eacute;c&amp;eacute;demment, une application va permettre de distinguer divers grand point de notre projet (Back/Front/...). Un module lui va d&amp;eacute;finir les diverses actions (Accueil/Inscription/...).   	Remarque : L&amp;rsquo;action par d&amp;eacute;faut d&amp;rsquo;un module est &amp;lsquo;index&amp;rsquo;.   	Un module contient &amp;eacute;galement un dossier &amp;lsquo;config&amp;rsquo; (vide par d&amp;eacute;faut), on peut y ajouter les m&amp;ecirc;mes scripts de configuration que contient une application et ainsi d&amp;eacute;finir des sp&amp;eacute;cificit&amp;eacute;s propres &amp;agrave; un module qui peuvent diff&amp;eacute;rer de l&amp;rsquo;application. (Exemple : dire qu&amp;rsquo;un module ne doit pas utiliser le layout; s&amp;eacute;curiser le module; utiliser des filtres diff&amp;eacute;rents; ...). La configuration de l&amp;rsquo;application est donc la configuration par d&amp;eacute;faut de chacun des modules.</description>
								<pubDate>2007-06-25 17:32:00</pubDate>
							</item>
					
							<item>
								<title>Le principe M.V.C.</title>
								<link>http://jonathan.demoutiez.net/Symfony/31-le-principe-m-v-c</link>
								<description>Mod&amp;egrave;le &amp;ndash; Vue &amp;ndash; Controleur   	A l&amp;rsquo;ex&amp;eacute;cution d&amp;rsquo;une requ&amp;ecirc;te, le Controleur est appel&amp;eacute; et pourra int&amp;eacute;ragir avec le Mod&amp;egrave;le, il envoie ensuite les donn&amp;eacute;es &amp;agrave; la Vue correspondante qui n&amp;rsquo;aura plus qu&amp;rsquo;&amp;agrave; structurer la page &amp;agrave; afficher.   </description>
								<pubDate>2007-06-25 17:29:00</pubDate>
							</item>
					
							<item>
								<title>Configuration générale d'une application</title>
								<link>http://jonathan.demoutiez.net/Symfony/30-configuration-generale-d-une-application</link>
								<description>Le dossier config de l&amp;rsquo;application contient les fichiers suivants :   app.ymlcache.ymlconfig.phpfactories.ymlfilters.ymlil8n.ymllogging.ymlrouting.ymlsecurity.ymlsettings.ymlview.yml  	D&amp;eacute;taillons rapidement les fichiers view.yml et routing.yml pour bien d&amp;eacute;buter le projet :   	view.yml   	Ce fichier permet de configurer la vue g&amp;eacute;n&amp;eacute;rale (charte graphique) de l&amp;rsquo;application :   	balises metas;les fichiers CSS &amp;agrave; inclure;les fichiers JS &amp;agrave; inclure;le layout.   	Exemple :   default:http_metas:  content-type: text/htmlmetas: title: symfony project description: symfony project keywords: symfony, project language: frstylesheets: [main, feuille2]javascripts: [javascript]has_layout: onlayout: charte_1  	Ici on a d&amp;eacute;fini :   	les balises &amp;laquo; meta &amp;raquo; que l&amp;rsquo;on souhaite;les feuilles de style &amp;agrave; utiliser (web/css/main.css, web/css/style.css);les fichiers &amp;laquo;javascript&amp;raquo; &amp;agrave; appeler (web/js/javascript.js);l&amp;rsquo;utilisation d&amp;rsquo;un layout &amp;laquo; charte_1 &amp;raquo; : (apps/NOM_APPLICATION/templates/charte_1.php).   	Le layout est ce qui englobe le corps de la page qui sera g&amp;eacute;n&amp;eacute;r&amp;eacute; par les modules.   	Nous verrons plus tard avec l&amp;rsquo;utilisation de components comment int&amp;eacute;grer des menus dynamiques ou autres&amp;hellip;   	Voici comment se pr&amp;eacute;sente le script du layout :   &amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;en&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt; &amp;lt;head&amp;gt;  &amp;lt;?php include_http_metas() ?&amp;gt;  &amp;lt;?php include_metas() ?&amp;gt;  &amp;lt;?php include_title() ?&amp;gt;  &amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;/favicon.ico&amp;quot; /&amp;gt; &amp;lt;/head&amp;gt; &amp;lt;body&amp;gt;  &amp;lt;!-- Code du haut de la page --&amp;gt;  &amp;lt;!-- Code de l&amp;#39;eventuel menu --&amp;gt;  &amp;lt;!-- Le corps de la page --&amp;gt;  &amp;lt;!-- Inclusion du contenu g&amp;eacute;n&amp;eacute;r&amp;eacute; par le module d&amp;#39;une action --&amp;gt;  &amp;lt;?= $sf_data-&amp;gt;getRaw(&amp;#39;sf_content&amp;#39;) ?&amp;gt;  &amp;lt;!-- ... --&amp;gt;  &amp;lt;!-- Code du bas de la page --&amp;gt; &amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;  	routing.yml   	Ce fichier va permettre de g&amp;eacute;rer simplement l&amp;rsquo;url rewriting. Pour l&amp;rsquo;instant voyons juste comment modifier le module et l&amp;rsquo;action par d&amp;eacute;faut de l&amp;rsquo;application :   homepage: url: / param: { module: MODULE_PAR_DEFAUT, action: ACTION_PAR_DEFAUT }  	ATTENTION :   	Une fois que vous avez modifi&amp;eacute; la configuration de votre projet, il est indispensable de vider le cache pour que les modifications soient prises en compte.   	Vider le cache     &amp;gt;symfony cc       </description>
								<pubDate>2007-06-25 17:17:00</pubDate>
							</item>
					
							<item>
								<title>Génération via la commande `symfony`</title>
								<link>http://jonathan.demoutiez.net/Symfony/29-generation-via-la-commande-symfony</link>
								<description>Symfony fonctionne avec un syst&amp;egrave;me d&amp;rsquo;applications / modules.   	G&amp;eacute;n&amp;eacute;rer une application     $&amp;gt;symfony init-app NOM_APPLICATION  	Voici l&amp;rsquo;architecture d&amp;rsquo;une application g&amp;eacute;n&amp;eacute;r&amp;eacute;e :   apps/NOM_APPLICATION/config/apps/NOM_APPLICATION/il8n/apps/NOM_APPLICATION/lib/apps/NOM_APPLICATION/modules/apps/NOM_APPLICATION/templates/  	G&amp;eacute;n&amp;eacute;rer un module     $&amp;gt;symfony init-module NOM_APPLICATION NOM_MODULE  	Voici l&amp;rsquo;architecture d&amp;rsquo;un module g&amp;eacute;n&amp;eacute;r&amp;eacute; :   apps/NOM_APPLICATION/modules/NOM_MODULE/actions/apps/NOM_APPLICATION/modules/NOM_MODULE/config/apps/NOM_APPLICATION/modules/NOM_MODULE/lib/apps/NOM_APPLICATION/modules/NOM_MODULE/templates/apps/NOM_APPLICATION/modules/NOM_MODULE/validate/  	Lors de la g&amp;eacute;n&amp;eacute;ration de la premi&amp;egrave;re application du projet, le fichier index.php (dans le dossier web) va &amp;ecirc;tre g&amp;eacute;n&amp;eacute;r&amp;eacute; &amp;laquo; pointant &amp;raquo; par d&amp;eacute;faut vers cette premi&amp;egrave;re application. L&amp;rsquo;application renvoie alors dans un premier temps vers le module par d&amp;eacute;faut de symfony.   Remarque : Lors de la g&amp;eacute;n&amp;eacute;ration d&amp;rsquo;une autre application, un fichier NOM_APP.php sera g&amp;eacute;n&amp;eacute;r&amp;eacute; (dans le dossier web). Il faudra donc pr&amp;eacute;ciser dans l&amp;rsquo;URL l&amp;rsquo;appel d&amp;rsquo;autres applications :    http://domaine/NOM_APP.php/  	Aussi il existe un mode d&amp;eacute;veloppement (debug) que l&amp;rsquo;on peut atteindre en passant par le fichier &amp;ldquo;NOM_APPLICATION_dev.php&amp;rdquo;   en mode prod   define(&amp;#39;SF_ENVIRONMENT&amp;#39;, &amp;#39;prod&amp;#39;);  define(&amp;#39;SF_DEBUG&amp;#39;,       false);  en mode dev   define(&amp;#39;SF_ENVIRONMENT&amp;#39;, &amp;#39;dev&amp;#39;);  define(&amp;#39;SF_DEBUG&amp;#39;,       true);</description>
								<pubDate>2007-06-25 17:12:00</pubDate>
							</item>
					
							<item>
								<title>Fichiers de configurations</title>
								<link>http://jonathan.demoutiez.net/Symfony/28-fichiers-de-configurations</link>
								<description>Le fichier de configuration config/config.php est &amp;agrave; modifier selon vos besoins (inclusion de librairies, d&amp;eacute;claration de globals, ...) :   // R&amp;eacute;pertoire de Symfony : &amp;quot;OBLIGATOIRES&amp;quot;$sf_symfony_lib_dir = &amp;#39;/usr/share/php/symfony&amp;#39;;$sf_symfony_data_dir = &amp;#39;/usr/share/php/data/symfony&amp;#39;;// D&amp;eacute;finir vos constantesdefine (&amp;#39;URL&amp;#39;, &amp;#39;http://domaine&amp;#39;);define (&amp;#39;LIB_DIR&amp;#39;, SF_ROOT_DIR . &amp;#39;/lib/&amp;#39;);define (&amp;#39;CGI_BIN&amp;#39;, LIB_DIR . &amp;#39;/lib/cgi-bin/&amp;#39;);// Inclure vos librairiesrequire_once(LIB_DIR . &amp;#39;functions.inc.php&amp;#39;);require_once(LIB_DIR . &amp;#39;Email.class.php&amp;#39;);// ...</description>
								<pubDate>2007-06-25 17:09:00</pubDate>
							</item>
					
							<item>
								<title>Configuration de la base de données</title>
								<link>http://jonathan.demoutiez.net/Symfony/27-configuration-de-la-base-de-donnees</link>
								<description>Il y a deux fichiers &amp;agrave; modifier pour cela :   	config/propel.ini   propel.targetPackage = lib.modelpropel.packageObjectModel = truepropel.project = ##NOM_PROJET##propel.database = mysqlpropel.database.createUrl = mysql://HOTE/propel.database.url = mysql://##USER##:##PASS##@##HOTE##/##NOM_BASE##  	config/database.yml   all:propel:class: sfPropelDatabaseparam:dsn: mysql://##USER##:##PASS##@##HOTE##/##NOM_BASE##</description>
								<pubDate>2007-06-25 17:06:00</pubDate>
							</item>
					
							<item>
								<title>Configuration d'apache</title>
								<link>http://jonathan.demoutiez.net/Symfony/26-configuration-d-apache</link>
								<description>Il est n&amp;eacute;cessaire que la configuration d&amp;#39;apache pointe directement vers le dossier web du projet via un &amp;#39;VirtualHost&amp;#39;.   01:&amp;lt;VirtualHost *&amp;gt;02: DocumentRoot /var/www/##NOM_PROJET##/web03:04: &amp;lt;Directory /&amp;gt;05:  AllowOverride All06: &amp;lt;/Directory&amp;gt;07:08:# Alias /sf /usr/share/php/data/symfony/web/sf09:10:# ScriptAlias /cgi-bin/ /var/www/NOM_PROJET/lib/cgi-bin/11:&amp;lt;/VirtualHost&amp;gt;  	Il est aussi indispensable d&amp;rsquo;avoir acc&amp;egrave;s au dossier `sf` (contenu dans Symfony) &amp;agrave; la racine du site. Il y a pour cela plusieurs solutions :   	Cr&amp;eacute;er un Alias dans la configuration d&amp;rsquo;apache (d&amp;eacute;commenter la ligne 8 du script ci-dessus).   	Cr&amp;eacute;er un lien symbolique dans le dossier web vers le dossier sf du projet.   $/web&amp;gt; ln -s /usr/share/php/data/symfony/web/sf  	Copier le dossier sf dans le dossier web   $/web&amp;gt; cp -R /usr/share/php/data/symfony/web/sf .</description>
								<pubDate>2007-06-25 17:05:00</pubDate>
							</item>
					
							<item>
								<title>Création d'un projet</title>
								<link>http://jonathan.demoutiez.net/Symfony/25-creation-d-un-projet</link>
								<description>Symfony nous offre donc la possibilit&amp;eacute; de cr&amp;eacute;er rapidement un projet via la commande `symfony` :   $&amp;gt; symfony init-project NOM_PROJET  	Ceci va permettre de g&amp;eacute;n&amp;eacute;rer l&amp;rsquo;architecture de dossier vu pr&amp;eacute;c&amp;eacute;demment ainsi que les fichiers de configurations et de bases du projet.</description>
								<pubDate>2007-06-25 17:05:00</pubDate>
							</item>
					
							<item>
								<title>Installation</title>
								<link>http://jonathan.demoutiez.net/Symfony/24-installation</link>
								<description>Il y a plusieurs solutions pour installer Symfony :   	Le plus simple est de passer par la biblioth&amp;egrave;que PEAR :     $&amp;gt; pear channel-discover pear.symfony-project.com  $&amp;gt; pear install symfony/symfony  	Sinon, les sources sont &amp;eacute;galement disponibles &amp;agrave; l&amp;rsquo;adresse suivante :   symfony-project.com   	Utiliser la commande `symfony`   	Nous aurons r&amp;eacute;guli&amp;egrave;rement besoin d&amp;rsquo;utiliser cette commande pour &amp;ldquo;diverses g&amp;eacute;n&amp;eacute;rations&amp;rdquo;; vider le cache; vider les logs; ... .   	En passant par PEAR la commande `symfony` sera directement accessible, sinon vous devrez soit :   	compl&amp;eacute;ter votre variable PATH;   	cr&amp;eacute;er un lien symbolique dans un de vos dossiers de scripts (&amp;agrave; l&amp;rsquo;installation le script est plac&amp;eacute; dans `/usr/bin/`);   	utiliser &amp;rdquo;./symfony&amp;rdquo; (g&amp;eacute;n&amp;eacute;r&amp;eacute; &amp;agrave; la racine de votre projet).   	Bash auto-completion   Il vous suffit de cr&amp;eacute;er un fichier symfony dans : 	/etc/bash_completion.d/ pour les Debian/etc/profile.d/ pour les RedHat   	et d&amp;rsquo;y mettre le contenu suivant : cliquez ici    </description>
								<pubDate>2007-06-25 16:54:00</pubDate>
							</item>
					
							<item>
								<title>L'URL rewriting</title>
								<link>http://jonathan.demoutiez.net/Symfony/23-l-url-rewriting</link>
								<description>Symfony utilise de l&amp;rsquo;U.R.L. rewriting comme ceci :   http://domaine/_NOM_ACTION_/_NOM_MODULE_/_NOM_VAR1_/VALEUR1/_NOM_VAR2_/VALEUR2...  	Nous remarquons que le passage de variables en m&amp;eacute;thode &amp;lsquo;GET&amp;rsquo; ne va plus s&amp;rsquo;effectuer avec les caract&amp;egrave;res : &amp;rsquo;?&amp;rsquo;, &amp;rsquo;=&amp;rsquo; et &amp;lsquo;&amp;amp;&amp;rsquo;, mais sera dans la continuit&amp;eacute; de l&amp;rsquo;U.R.L. s&amp;eacute;par&amp;eacute; par des &amp;rsquo;/&amp;rsquo;.   	Remarque :   	L&amp;rsquo;URL http://domaine/ appellera le module et l&amp;rsquo;action par d&amp;eacute;faut que l&amp;rsquo;on pourra d&amp;eacute;finir (exemple: &amp;lsquo;Accueil/index&amp;rsquo;), mais si l&amp;rsquo;on veux passer des variables en param&amp;egrave;tre, on sera oblig&amp;eacute; de les pr&amp;eacute;ciser :   http://domaine/Accueil/index/var1/valeur1  	et non :   http://domaine/var1/valeur1 ici on appelle la module &amp;lsquo;var1&amp;rsquo; et l&amp;rsquo;action &amp;lsquo;valeur1&amp;rsquo;, ce qui nous renverra sur une page erreur 404</description>
								<pubDate>2007-06-25 16:53:00</pubDate>
							</item>
					
							<item>
								<title>Architecture générale</title>
								<link>http://jonathan.demoutiez.net/Symfony/22-architecture-generale</link>
								<description>	Voici l&amp;#39;architecture d&amp;#39;un projet symfony (&amp;agrave; la racine):&amp;nbsp;apps/ * Les applications du projet.batch/ * Les t&amp;acirc;ches automatis&amp;eacute;es du projet.cache/ * Le dossier de cache (g&amp;eacute;r&amp;eacute; par Symfony).config/ * La config g&amp;eacute;n&amp;eacute;ral du projet.data/ * Les donn&amp;eacute;es de configurations relatives au projet. (Acc&amp;egrave;s BDD&amp;hellip;)doc/ * Emplacement de la documentation.lib/ * Contient entre autre le Mod&amp;egrave;le du projet, mais aussi les librairies communes aux applications.log/ * Emplacement des logs.plugins/ * Emplacement des plugins d&amp;eacute;di&amp;eacute;s &amp;agrave; Symfony.test/ * Gestion des tests fonctionnels et unitaires.web/ * Dossier acc&amp;egrave;ssible d&amp;rsquo;internet il contient &amp;ldquo;index.php; images; CSS; JS; ...&amp;rdquo;&amp;nbsp;</description>
								<pubDate>2007-06-25 16:52:00</pubDate>
							</item>
					
							<item>
								<title>Application &amp; module</title>
								<link>http://jonathan.demoutiez.net/Symfony/21-application-module</link>
								<description>Un projet Symfony se base sur la cr&amp;eacute;ation d&amp;rsquo;applications qui va permettre de s&amp;eacute;parer par exemple le front-office et le back-office.   	Les modules d&amp;rsquo;une application vont permettre de s&amp;eacute;parer chaque fonction distincte d&amp;rsquo;un projet (espace membre; catalogue; paiement; inscription; ...)   	Gr&amp;acirc;ce &amp;agrave; ce principe nous allons pouvoir obtenir un projet clair et structur&amp;eacute; !   	Le mod&amp;egrave;le, g&amp;eacute;n&amp;eacute;r&amp;eacute; par propel est commun &amp;agrave; toutes les applications, ce qui va nous permettre de pouvoir int&amp;eacute;ragir avec la base de donn&amp;eacute;es dans la totalit&amp;eacute; du projet. Nous en verrons les GRANDS avantages.</description>
								<pubDate>2007-06-25 16:51:00</pubDate>
							</item>
					
							<item>
								<title>Qu'est ce que Symfony ?</title>
								<link>http://jonathan.demoutiez.net/Symfony/12-qu-est-ce-que-symfony</link>
								<description>Symfony est un framework Open Source d&amp;eacute;velopp&amp;eacute; en PHP5. Inspir&amp;eacute; de Ruby On Rail, il int&amp;eacute;gre PROPEL (ORM), CREOLE (Couche d&amp;rsquo;abstraction de base de donn&amp;eacute;es) et Mojavi (impl&amp;eacute;mention MVC).   	Propel est un ORM, il permet de faire une correspondance entre le monde objet du langage et le monde relationnel de la base de donn&amp;eacute;es;CREOLE est une couche d&amp;rsquo;abstraction de base de donn&amp;eacute;es, elle va permettre de g&amp;eacute;rer n&amp;rsquo;importe quel gestionnaire de base de donn&amp;eacute;es;MVC : Le principe MVC permet de s&amp;eacute;parer nettement les couches MODELES (Base de donn&amp;eacute;es), VUES, CONTROLEURS.   	En r&amp;eacute;utilisant l&amp;rsquo;existant plut&amp;ocirc;t que de repartir &amp;agrave; z&amp;eacute;ro Symfony reste &amp;agrave; ce jours l&amp;rsquo;une des solutions les plus compl&amp;egrave;tes en PHP.</description>
								<pubDate>2007-05-04 16:10:00</pubDate>
							</item>
					</channel>
	</rss>
	