Ces derniers temps j'ai pas mal eu de bouleaux en Symfony essentiellement et je suis content d'avoir pu terminé ce tutoriel.
Il s'adresse essentiellement aux développeurs symfony ou à ceux qui souhaitent s'y mettre.
Des notions d'AS3 et de pattern MVC sont également importantes à avoir.
Bref, vous l'aurez compris, c'est un tutoriel pour développeurs expérimentés.
Ce tutoriel est réalisable sur tout support (Linux, MAC, Windows).
Je passerai les détails de l'utilisation du SVN mais personnellement je travaille toujours avec dans la mesure du possible.
Je donnerai les conseils principaux concernant la structure symfony.
Pour les débutant en symfony, je vous conseille fortement de vous familiariser avec le framework en suivant ce
Avant de commencer, assurez vous que votre machine possède tous les outils nécessaires:
- Un serveur Apache2 avec PHP 5.2.4 minimum (MAMP, WAMP, LAMP).
Pour les utilisateurs de WAMP, il est probable que PEAR ne soit pas installé.
Rien de plus simple, dans le répertoire PHP de WAMP il y a un fichier
go-pear.bat qu'il suffit de lancer via le terminal.
I/ Créer le projet symfony.
1) Première étape, comme dans tout projet symfony, créer l'environnement du projet.
- Ouvrez un terminal.
- Créer le répertoire du projet et celui de la librarie symfony :
## MAC / LINUX:
mkdir -p /projects/egallery/trunk/deploy/lib/vendor
## WINDOWS:
mkdir c:\projects\egallery\trunk\deploy\lib\vendor
- Aller dans le repertoire lib/vendor.
- Exporter le dernier tags du projets symfony:
Sur windows utiliser TortoiseSVN ou installer VisualSVN et créer la variable d'environnement sur le fichier svn.exe // TODO finish explain
svn export http://svn.symfony-project.com/tags/RELEASE_1_2_8/ symfony/
- Revenir à la racine du projet :
cd ../..
- Vérifier la configuration du système:
php lib/vendor/symfony/data/bin/check_configuration.php
Le script renvoie ceci quand tout va bien:
********************************
* *
* symfony requirements check *
* *
********************************
php.ini used by PHP: /etc/php5/cli/php.ini
** WARNING **
* The PHP CLI can use a different php.ini file
* than the one used with your web server.
* If this is the case, please launch this
* utility from your web server.
** WARNING **
** Mandatory requirements **
OK PHP version is at least 5.2.4
OK php.ini has zend.ze1_compatibility_mode set to off
** Optional checks **
OK PDO is installed
OK PDO has some drivers installed: mysql
OK PHP-XML module is installed
OK XSL module is installed
OK The token_get_all() function is available
OK The mb_strlen() function is available
OK The iconv() function is available
OK The utf8_decode() is available
OK A PHP accelerator is installed
OK php.ini has short_open_tag set to off
OK php.ini has magic_quotes_gpc set to off
OK php.ini has register_globals set to off
OK php.ini has session.auto_start set to off
OK PHP version is not 5.2.9
Si seulement quelques 'warning' apparaissent, ce n'est pas trop grave.
Faite les correctifs demander dans le fichier php.ini utilisé (Attention il peut y en avoir plusieurs)
Sur linux il est assez facile d'ajouter les modules manquants, c'est plus compliqué sur MAC et Windows et pas forcement nécessaire à ce stade.
Par contre si le résultat vous signale une mauvaise configuration, il faudra faire le nécessaire pour corriger le problème avant d'aller plus loin.
- Créer la structure du projet symfony
## Pour MAC / LINUX
php lib/vendor/symfony/data/bin/symfony generate:project egallery
## Pour windows:
php lib\vendor\symfony\data\bin\symfony generate:project egallery
## On peut lister les différentes commandes de symfony en tapant:
php symfony
En ajoutant l'option -V à la fin, on peut voir le version du framework.
2) Créer l'application.
php symfony generate:app --escaping-strategy=on --csrf-secret=Unique$ecret frontend
Les 2 options --escaping-strategy
et --csrf-secret
sont pour la sécurité.
Pour plus de détails allez voir le projet
symfony.
Cette méthode créer l'arborescence nécessaire au projet dans le répertoire apps/frontend/
3) Configurer l'application.
- Symfony utilise une classe php pour faire les imports automatique des classes dont il a besoin.
Pour une meilleur portabilité de code il faut changer le chemin de cette classe dans le fichier config/
ProjectConfiguration.class.php :
require_once dirname(__FILE__) . '/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
- Pour une meilleure gestion des projets je conseille de forcer le fichiers hosts:
Pour Linux et MAC, il est dans le répertoire /etc/hosts
Pour windows, il est dans le répertoire C:\WINDOWS\system32\drivers\etc\
Un fois le mode lecture seul enlevé sur Windows, ajouter cette ligne:
127.0.0.1 egallery.localhost
Note: Cette manipulation permet de créer un nom de domaine virtuellement (uniquement sur la machine).
En générale c'est comme ceci que les Admin réseau testent la migration de sites avant de basculer les DNS.
4) Configurer le serveur:
- Vérifier la présence et Activer si nécessaire des module
mod_vhost_alias et mod_rewrite.
- Créer le Virtual host dans Apache2:
Linux : Créer un fichier /etc/apache2/sites-enabled/egallery.conf
Mac/Win : Editer le fichier httpd.conf ou apache2.conf
On peut également créer un VirtualHost dans un fichier à part de la conf d'Apache mais je ne m'étendrais pas dessus ici.
Il faut dire à apache que la racine de l'application est dans le répertoire web/ de symfony.
Remplacer les chemins
/projects/egallery/trunk/deploy/ par c:\projects\egallery\trunk\deploy\ pour windows.
<VirtualHost *:80>
ServerName egallery.localhost
DocumentRoot "/projects/egallery/trunk/deploy/web"
DirectoryIndex index.php
<Directory "/projects/egallery/trunk/deploy/web">
AllowOverride All
Allow from All
</Directory>
Alias /sf /projects/egallery/trunk/deploy/lib/vendor/symfony/data/web/sf
<Directory "/projects/egallery/trunk/deploy/lib/vendor/symfony/data/web/sf">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
- Relancer Apache et tester l'URL http://egallery.localhost
Si tout est bien configurer vous devez avoir la page d'accueil de symfony comme ceci:
II/ Développer l'application frontend
1) Installer Doctrine 1.1
Note: Pendant tout cette partie, l'application sera inutilisable. Elle sera à nouveau opérationnelle à la fin de la configuration de la BDD (partie 2: créer la BDD).
Symfony à la possibilité d'utiliser 2 ORM pour la gestion des Models de BDD : Propel ou Doctrine.
En l'occurence depuis la version 1.2 de Symfony, de plus de en plus de developpements avec Symfony se font avec cet ORM. Fabien Potencier, le créateur de symfony, recommande également d'utiliser Doctrine.
C'est pourquoi nous allons installer le plugin de doctrine.
- Première étape il faut désactiver complètement propel.
- Editer la classe
ProjectConfiguration dans le repertoire config
- Remplacer cette ligne :
$this->enableAllPluginsExcept(array('sfDoctrinePlugin', 'sfCompat10Plugin'));
- Par celle-ci:
$this->enableAllPluginsExcept(array('sfPropelPlugin', 'sfCompat10Plugin'));
- Supprimer les fichiers:
config/databases.yml
conf/propel.ini
conf/schema.yml
web/sfPropelPlugin
- Publier à nouveau les plugins:
php symfony plugin:publish-assets
- Résultat de la commande:
>> plugin Configuring plugin - sfDoctrinePlugin
>> plugin Configuring plugin - sfProtoculousPlugin
- Vider le cache de symfony:
php symfony cc
Note: cette commande est très importante dans projet symfony, je vous conseille vivement de lire les tutorials à ce sujet ici
2) Créer la BDD
- Créer la BDD.
mysqladmin -uroot -p create egallery
>> Enter password: ******
Note: Changer le chemin de la commande mysqladmin avec le bon chemin selon la configuration de votre machine ou créer une une BDD en UTF8 dans phpmyadmin.
- Configurer l'accès à la BDD dans symfony:
php symfony configure:database --name=doctrine --class=sfDoctrineDatabase "mysql:host=localhost;dbname=jobeet" root myPassSecret
- Le fichier conf/database.yml est créé:
all:
doctrine:
class: sfDoctrineDatabase
param:
dsn: 'mysql:host=localhost;dbname=egallery'
username: root
password: myPassSecret
Note: Eviter de configurer un accès à la BDD avec un utilisateur root, il vaux mieux créer un utilisateur spécifique à cette BDD.
- Créer le schéma de la BDD:
nano config/doctrine/schema.yml
# config/doctrine/schema.yml
Gallery:
columns:
id: { type: integer(4), primary: true, autoincrement: true }
description: { type: string, notnull: true }
title: { type: string(150), notnull: true }
url: { type: string(255), notnull: true }
# create the application model
php symfony doctrine:build-model
>> doctrine generating model classes
# create the sql structure file
php symfony doctrine:build-sql
>> doctrine generating sql for models
# launch the sql structure file
php symfony doctrine:insert-sql
>> doctrine created tables successfully
# build the schema
php symfony doctrine:build-schema
>> doctrine generating yaml schema from database
>> doctrine Generate YAML schema successfully from database
Note: Pour plus de détail sur la création et la configuration d'une BDD avec Doctrine consulter la documentation en ligne: http://www.doctrine-project.org/
Pour la configuration d'un fichier yml avec doctrine: http://www.doctrine-project.org/documentation/manual/1_1/en/yaml-schema-files.
Pour en savoir plus sur le format YAML, allez consulter cette adresse: http://yaml.org/
Plusieurs plugins eclipse existent pour prendre en charge ce format de fichier, personnellement j'utilise celui-là : YEdit
- Créer le fichier data/fixtures/gallery.yml:
# data/fixtures/gallery.yml
gallery:
<?php for( $i = 1 ; $i <= 7 ; $i++ ): ?>
picture_<?php echo $i ; ?>:
description : The Picture n°0<?php echo $i ; ?>
title : Picture 0<?php echo $i ; ?>
url : picture/picture<?php echo $i ; ?>.jpg
<?php endfor ; ?>
Ce fichier servira à remplir la BDD.
Note : Il est possible dans un fichier .yml de
- Insérer les données dans la Base:
php symfony doctrine:data-load
>> doctrine loading data fixtures from "/ho...ery/trunk/deploy/data/fixtures"
>> doctrine Data was successfully loaded
Note: Il faut faire attention aux espaces dans le fichiers yml sinon la commande peut générer une erreur du genre:
Validation failed in class Gallery
2 fields had validation errors:
* 1 validator failed on title (notnull)
* 1 validator failed on url (notnull)
Voire ce message:
Unable to parse string: Unable to parse line 4 ( picture_2:).
Le problème vient du mauvais parsing du fichier yml qui ne trouve pas les champs
title et
url.
On peut bien s'en rendre compte en changeant le fichier
schema.yml et en relançant tout le process:
# config/doctrine/schema.yml
Gallery:
tableName: gallery
columns:
id:
type: integer(4)
primary: true
autoincrement: true
description:
type: string(2147483647)
notnull: true
title:
type: string(150)
notnull: false
url:
type: string(255)
notnull: false
# rebuild all the database schema
php symfony doctrine:build-all-reload
This command will remove all data in your database.
Are you sure you want to proceed? (y/N)
y
>> doctrine dropping databases
>> doctrine Successfully dropped database f...ion "doctrine" named "egallery"
>> doctrine creating databases
>> doctrine Successfully created database f...ion "doctrine" named "egallery"
>> doctrine generating model classes
>> doctrine generating sql for models
>> doctrine Generated SQL successfully for models
>> doctrine generating form classes
>> doctrine /home.../base/BaseGalleryForm.class.php
>> tokens /home.../doctrine/GalleryForm.class.php
>> tokens /home...rine/BaseFormDoctrine.class.php
>> doctrine generating filter form classes
>> tokens /home...BaseGalleryFormFilter.class.php
>> tokens /home...ine/GalleryFormFilter.class.php
>> tokens /home...aseFormFilterDoctrine.class.php
>> doctrine created tables successfully
>> doctrine loading data fixtures from "/ho...ery/trunk/deploy/data/fixtures"
>> doctrine Data was successfully loaded
En regardant les données insérées dans le BDD, on peut voir que les champs
title et
url ont sont vide et que les données ont été concaténées dans le champs
description.
De plus, le projet AmfPHP n'est plus du tout maintenu et la question est: Est-ce qu'il est optimal d'utiliser cette encore techno dans les projets flash ?
Nicolas Perriault, quant à lui, a publié un billet sur son blog expliquant l'installation de AmfPHP dans un projet symfony:
http://prendreuncafe.com/blog/post/2008/07/25/Partager-la-session-utilisateur-entre-Flash/Flex-et-symfony-avec-AmfPHP
L'interêt du plugin sfAmfPlugin c'est l'interaction avec l'ORM Doctrine pour faciliter la création des requête SQL.
On l'installe comme ça:
# install processing
$ php symfony plugin:install sfAmfPlugin
>> plugin installing plugin "sfAmfPlugin"
>> sfPearFrontendPlugin Attempting to discover channel "pear.symfony-project.com"...
>> sfPearFrontendPlugin downloading channel.xml ...
>> sfPearFrontendPlugin Starting to download channel.xml (663 bytes)
>> sfPearFrontendPlugin .
>> sfPearFrontendPlugin ...done: 663 bytes
>> sfPearFrontendPlugin Auto-discovered channel "pear.symfony-project.com", alias
>> sfPearFrontendPlugin "symfony", adding to registry
>> sfPearFrontendPlugin Attempting to discover channel
>> sfPearFrontendPlugin "plugins.symfony-project.org"...
>> sfPearFrontendPlugin downloading channel.xml ...
>> sfPearFrontendPlugin Starting to download channel.xml (639 bytes)
>> sfPearFrontendPlugin ...done: 639 bytes
>> sfPearFrontendPlugin Auto-discovered channel "plugins.symfony-project.org", alias
>> sfPearFrontendPlugin "symfony-plugins", adding to registry
>> sfPearFrontendPlugin downloading sfAmfPlugin-1.4.2.tgz ...
>> sfPearFrontendPlugin Starting to download sfAmfPlugin-1.4.2.tgz (49,336 bytes)
>> sfPearFrontendPlugin ...done: 49,336 bytes
>> sfSymfonyPluginManager Installation successful for plugin "sfAmfPlugin"
# clear the cache
php symfony cc
Nota: la version svn et le package téléchargé via PEAR n'est à priori pas la même.
4) Créer le gateway
# the command to create the gateway module
php symfony generate:module frontend amfgateway
>> dir+ /home...tend/modules/amfgateway/actions
>> file+ /home...teway/actions/actions.class.php
>> dir+ /home...nd/modules/amfgateway/templates
>> file+ /home...eway/templates/indexSuccess.php
>> file+ /home...ntend/amfgatewayActionsTest.php
>> tokens /home...ntend/amfgatewayActionsTest.php
>> tokens /home...teway/actions/actions.class.php
>> tokens /home...eway/templates/indexSuccess.php
Ensuite il faut créer l'instance du gateway dans le module.
<?php
/**
* amfgateway actions.
*
* @package egallery
* @subpackage amfgateway
* @author NairuS
* @version SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
*/
class amfgatewayActions extends sfActions
{
/**
* Executes index action
*
* @param sfRequest $request A request object
*/
public function executeIndex( sfWebRequest $request )
{
$this->setLayout( false ) ;
$gateway = new sfAmfGateway() ;
$response = sfContext::GetInstance()->getResponse() ;
$response->setContent($gateway->service()) ;
return sfView::NONE ;
}
}
?>
Note : La méthode
setLayout et la propriété
sfView::NONE permettent à symfony de ne pas afficher de view lors de l'appel à cette action.
On peut donc sans crainte supprimer la view
indexSuccess dans le répertoire
template que la gérénation du module à créer par défaut.
5) Créer le service getGallery
# the command to create the service
php symfony amf:create-service --package=egallery/net/remoting Gallery
>> dir+ /home...services/egallery/net/remoting/
>> file+ /home...moting/GalleryService.class.php
>> tokens /home...moting/GalleryService.class.php
L'option
--package= est optionnel et permet de créer des répertoires pour classer les services.
6) Renvoyer le model de picture à afficher dans le flash.
<?php
/**
* AMF enabled service class GalleryService
*
* Project: egallery
*
* @package egallery.net.remoting
* @author NairuS
*
* @version SVN: $Id $
*/
class GalleryService extends sfAmfService
{
/**
* Returns all the Pictures of the DB
* @return Array of PictureVO
*/
public function getPictures()
{
$datas = Doctrine::getTable( 'Gallery' )->findAll() ;
return $datas->getData();
}
}
?>
La commande Doctrine::getTable( 'Gallery' )->findAll() renvoie un objet Doctrine_Collection.
La méthode getData() renvoie le tableau d'objets Doctrine_Record de la table en question.
Note : Après toutes commandes symfony pensez a vider le cache pour forcer aussi d'Autoload des nouvelles classes ajoutées:
php symfony cc
III/ Intégrer le flash.
1) Exporter le projet eGallery.
- Exporter les sources du projet dans le répertoire trunk.
svn export http://astr.googlecode.com/svn/trunk/AS3/trunk/examples/egallery/advanced/trunk/ path/to/dir
Attention : Etant donné que le répertoire
trunk existe déjà, la commande ci-dessus ne fonctionnera pas. Dans ce cas, il faut l'exporter hors du projet et déplacer les sources dans le répertoire
trunk.
Le répertoire
deploy doit également faire preuve d'une grande attention. Plus haut dans le tutoriel nous y avons installé le framework
symfony.
Grâce à son moteur de rooting nous faisons pointer le root du
VirtualHost dans le répertoire
web.
C'est donc ici qu'il faudra y mettre les fichiers du répertoire
deploy de egallery. Nous n'avons pas besoin du fichier
index.html ici mais il nous servira à construire la page d'accueil du site plus tard.
Nous n'avons pas besoin du tout du répertoire
php qui contient
amfphp puisque c'est
symfony qui prendra le relais. Nous pouvons le supprimer.
Les fichiers
css doivent être déplacer du répertoire
style vers le répertoire
css pour que symfony puisse les prendre en compte plus tard.
Un fois cette manipulation faite on peut supprimer le répertoire
style.
Avant de 'commiter' ces modifications vérifier qu'il n'y a pas de fichiers que vous ne voulais pas envoyer.
egallery/trunk$ svn st
? test
? .as3_classpath
? src
? bin
? libs
? .settings
? deploy/test/functional/frontend/homeActionsTest.php
? deploy/apps/frontend/modules/home
M deploy/apps/frontend/templates/layout.php
? deploy/web/context
? deploy/web/locale
? deploy/web/library
? deploy/web/index.swf
? deploy/web/config
? deploy/web/css/egallery.css
? deploy/web/css/index.css
? deploy/web/js/swfobject.js
Ici on peut se rendre compte qu'il y a des fichiers de eclipse et FDT qui se sont mis dans les fichiers non versionné du svn.
Il faut les ignorer avec la commande:
svn propedit svn:ignore .
Après l'argument svn:ignore il faut définir le chemin ou on veut ajouter des fichiers à ignorer. Dans notre cas on met un
. car on se situe déjà dans le répertoire souhaité.
Votre éditeur par défaut s'ouvre et il suffit ajouter ces lignes:
*.project
*.as3_classpath
*.settings
Un fois que vous avez sauvegarder vous devez avoir ce résultat:
egallery/trunk$ svn propedit svn:ignore .
Nouvelle valeur définie pour la propriété 'svn:ignore' sur '.'
egallery/trunk$ svn st
M .
? test
? src
? bin
? libs
? deploy/test/functional/frontend/homeActionsTest.php
? deploy/apps/frontend/modules/home
M deploy/apps/frontend/templates/layout.php
? deploy/web/context
? deploy/web/locale
? deploy/web/library
? deploy/web/index.swf
? deploy/web/config
? deploy/web/css/egallery.css
? deploy/web/css/index.css
? deploy/web/js/swfobject.js
C'est bon, vous pouvez envoyer les modifications sur votre dépôt.
2) Modifier les sources pour adapter le remoting à celui de symfony.
2.1. Adapter l'IoC:
Dans un premier temps, il faut changer l'appel au gateway et au service remoting.
- Editer le fichier web/context/net/remoting/getGallery.eden et changer ces 3 lignes:
{ name : "methodName" , value : "getPictures" } ,
{ name : "objectEncoding" , value : 3 } ,
{ name : "serviceName" , value : "egallery.net.remoting.GalleryService" } ,
Ces modifications permettent de définir le bon service remoting à appeler par le protocole AMF3.
- Changer le gateway en éditant le fichier config/config.eden:
gatewayUrl = "http://{0}/frontend_dev.php/amfgateway" ;
httphost = "egallery.localhost" ;
Il faut cibler l'environnement dev de symfony sinon on aura un timeout sur le remoting à tout les coups.
Cette notation
{0} permet de remplacer cette valeur par la variable
httphost définit dessous grâce à la classe
system.Strings de
maashaack.
La variable
httphost sera écraser en prod par le
httphost du serveur de
WEB qui sera passer en
flashvars par le
PHP.
Note: Avec le plugin que j'ai installé, je dois cibler l'environnement 'frontend_dev.php' pour que le protocole AMF puisse se faire.
Mon collègue n'a pas réussi avec cette configuration et a dû cibler l'environnement de prod pour ça.
2.2. Adapter le remplissage du model AS3:
Le plugin
sfAmfPlugin basé sur
SabreAMF, permet de faire du class mapping en annotant le tag
@AmfClassMapping dans le PHPDoc du service.
Dans notre cas on ne renvoie pas un objet à mapper mais une collection d'objets. Ce qui, à ma connaissance d'aujourd'hui ne fonctionne pas.
Après plusieurs tests, ce tag renvoie bien un
PictureVO, seulement ce ne sont pas les enregistrements qui sont 'mappés' mais la
collection.
Pour utiliser le
class mapping de
SabreAMF, il faudrait renvoyer de simple objet.
Par exemple on souhaitait retourner un seul
PictureVO via remoting on ajouterait cette methode au service:
/**
* Returns a Picture of the DB
*
* @param Integer $id
* @return PictureVO
* @AmfClassMapping(name="egallery.vo.PictureVO")
*/
public function getPicture( $id )
{
return Doctrine::getTable( 'Gallery' )->find( $id )
}
Mais grâce à la puissance de l'AS3, avec son type
* et l'implémentation du
for ... in , nous avons la possibilité de contourner le problème.
En effet, la class
vegas.vo.SimpleValueObject permet de récupérer un objet générique et de le parcourir propriété par propriété pour récupérer les valeurs qui correspondent à notre objet flash.
Commençons par éditer le fichier
egallery.net.remoting.GetGallery
# dans la méthode result remplacer la première ligne par la seconde.
model.addVO( result[i] as PictureVO ) ;
model.addVO( new PictureVO( result[i] ) ) ;
Il faut ensuite recompiler l'application avec FDT ou autre logiciels pour les application AS3.
3) Finaliser le site.
3.1. Créer le module home pour l'accueil.
# The argument init-module is a shortcut to the generate:module command
php symfony init-module frontend home
>> dir+ /home/sfpro...s/frontend/modules/home/actions
>> file+ /home/sfpro.../home/actions/actions.class.php
>> dir+ /home/sfpro...frontend/modules/home/templates
>> file+ /home/sfpro...home/templates/indexSuccess.php
>> file+ /home/sfpro...al/frontend/homeActionsTest.php
>> tokens /home/sfpro...al/frontend/homeActionsTest.php
>> tokens /home/sfpro...home/actions/actions.class.php
>> tokens /home/sfpro...home/templates/indexSuccess.php
3.2. Intégrer les CSS et JS.
- Editer le fichier config/view.yml:
# ajouter les css et js dans les propriétés suivantes:
stylesheets: [main.css, index.css, egallery.css]
javascripts: [swfobject.js]
3.3. Modifier les templates
- Supprimer le doctype dans le layout principal dans le fichier apps/frontend/templates/layout.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Cette balise, pour raison que j'ignore encore, empêche l'affichage du swf à 100%.
Je l'ai donc supprimé pour afficher le swf en 100%.
Note: on a la possibilité avec symfony de créer d'autre layout et de les charger dans n'importe quelles views avec les fichiers YML.
- Ecrire dans le template indexSuccess.php:
<script language="JavaScript" type="text/javascript">
var flashvars =
{
httphost: "<?php echo $_SERVER['HTTP_HOST'] ; ?>"
} ;
var params =
{
allowScriptAccess : "sameDomain" ,
bgcolor : "#666666" ,
quality : "high"
} ;
var attributes =
{
align : "middle"
} ;
swfobject.embedSWF("/index.swf", "application", "100%", "100%", "9.0.124", false, flashvars, params, attributes );
</script>
<div id="application">
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
</div>
3.3. Créer le rooting vers la page d'accueil.
- Editer le fichier apps/frontend/config/routing.yml et remplacer par ce code:
# default rules
homepage:
url: /
param: { module: home, action: index }
default_index:
url: /:module
param: { action: index }
default:
url: /:module/:action/*
- Faire un clear-cache pour que symfony puisse prendre en compte le nouveau routing.
Dans les sources du projet je n'ai pas mis le framework
Vegas mais les sources sont disponible
ici.