Symfony
De GioWiki.
pour
Symfony
Aller à :
Navigation
,
rechercher
== Installation == Besoin des paquets supplémentaires suivants : * php5-xsl * php5-sqlite (pour utiliser une base de donnée sqlite) * php-pear Télécharger le paquet sandbox de Symfony, décompressez le et c'est bon :) == Configuration de base == === Apache === Activer le mod_rewrite si ce n'est déjà fait : cd /etc/apache2/mods-enabled/ ln -s ../mods-available/rewrite.load rewrite.load Créer le fichier de configuration /etc/apache2/conf.d/sf_sandbox.conf <pre> Alias /sf_sandbox /var/www/sf_sandbox/web/ <Directory /var/www/sf_sandbox/web/> AllowOverride All Allow from all </Directory> </pre> Modifier aussi le fichier web/.htaccess RewriteRule ^(.*)$ /sf_sandbox/index.php [QSA,L] Puis appliquez les changements : apache2ctl graceful === Symfony === Dans le fichier web/frontend_dev.php on va autoriser notre réseau local à accéder à notre environnement de développement Symfony : if (!in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1', '192.168.1.X'))) ... Remplacer X par l'adresse IP de votre poste. === Activer Doctrine à la place de Propel === Pour cela il faut activer le plugin Doctrine et désactiver le plugin Propel en mettant les lignes suivantes dans le fichier config/ProjectConfiguration.class.php <pre> public function setup() { $this->enablePlugins(array('sfDoctrinePlugin')); $this->disablePlugins(array('sfPropelPlugin')); } </pre> Ou si vous préférez avoir tous les plugins d'activés par défaut, on peut mettre la ligne suivante : <pre> public function setup() { $this->enableAllPluginsExcept(array('sfPropelPlugin', 'sfCompat10Plugin')); } </pre> php symfony plugin:publish-assets Il faut aussi retirer le plugin Propel ainsi que les références à propel (schema.yml et propel.ini dans config) <pre> rm web/sfPropelPlugin rm config/propel.ini rm config/schema.yml mkdir config/doctrine; touch config/doctrine/schema.yml rm config/database.yml </pre> Puis régénérer sa database.yml à l'aide de la commande suivante : php symfony configure:database --name=doctrine --class=sfDoctrineDatabase "mysql:host=localhost;dbname=sf_sandbox" user PassWord Plus d'informations : http://www.symfony-project.org/jobeet/1_2/Doctrine/en/03#chapter_03_enabling_sfdoctrineplugin == Exemple de création d'une application simple == Dans cet exemple, nous allons créer un petit forum avec deux tables. === Faire son schéma de base de donnée === Premièrement, nous allons créer le fichier config/schema.yml <pre> ForumTopic: tableName: forum_topic actAs: { Timestampable: ~ } columns: id: { type: integer(4), primary: true, autoincrement: true } created_at: { type: timestamp, notnull: true } updated_at: { type: timestamp } title: { type: string(255), notnull:true } content: { type: string(4000), notnull: true } is_closed: { type: boolean, default: false } ForumPost: tableName: forum_post actAs: { Timestampable: ~ } columns: id: { type: integer(4), primary: true, autoincrement: true } forum_topic_id: { type: integer(4), notnull: true } created_at: { type: timestamp, notnull: true } updated_at: { type: timestamp } title: { type: string(255) } content: { type: string(4000), notnull: true } relations: ForumTopicId: { class: ForumTopic, local: forum_topic_id, foreign: id, foreignType: one, onDelete: CASCADE } </pre> Le actAs: { Timestampable: ~ } permet de générer automatiquement les colonnes created_at et updated_at. Dans l'exemple, nous les avons redéfinies afin de les mettre dans l'ordre voulu dans les tables. Par défaut elles sont mises en fin de table. Plus d'informations ici : http://www.symfony-project.org/jobeet/1_2/Doctrine/en/03#chapter_03_the_schema ==== Faire une jointure entre deux tables ==== <pre> Mail: tableName: mail actAs: { Timestampable: { updated: { disabled: true } } } columns: id: { type: integer(4), primary: true, autoincrement: true } created_at: { type: timestamp, notnull: true } created_by: { type: integer(4), notnull: true } title: { type: string(255) } content: { type: string(4000), notnull: true } relations: CreatedBy: { class: sfGuardUser, local: created_by, foreign: id, foreignType: one, onDelete: CASCADE } Inbox: { class: sfGuardUser, refClass: MailInbox, local: mail_id, foreign: user_id, foreignAlias: MailInbox, onDelete: CASCADE } MailInbox: tableName: mail_inbox columns: mail_id: { type: integer(4), notnull: true, primary: true } created_for: { type: integer(4), notnull: true, primary: true } relations: sfGuardUser: { local: created_for, onDelete: CASCADE } Mail: { onDelete: CASCADE } </pre> * refClass : Nom de la table de liaison * class : Un côté de la liaison * local et foreign : Les deux clés de la table de liaison * foreignAlias : Nom de la relation === Créer magiquement les pages associées à notre schéma === <pre> php symfony doctrine:build-model php symfony doctrine:build-sql php symfony doctrine:insert-sql # Une erreur est affichée lors de la première insertion car il essaye de dropper des tables inexistantes php symfony doctrine:build-forms php symfony doctrine:generate-module --with-show --non-verbose-templates frontend topic ForumTopic php symfony doctrine:generate-module --non-verbose-templates frontend post ForumPost php symfony cache:clear </pre> Plus d'informations : http://www.symfony-project.org/jobeet/1_2/Doctrine/en/03#chapter_03_the_orm === Données initiales aux modules === Il faut créer et remplir les fichiers .yml dans data/fixtures/ puis exécuter la commande : php symfony doctrine:data-load Plus d'informations : http://www.symfony-project.org/jobeet/1_2/Doctrine/en/03#chapter_03_the_initial_data === Créer les méthodes de base __toString() === Dans les fichiers lib/model/{ForumTopic,ForumPost}.php <pre> public function __toString() { return $this->getTitle(); } </pre> === Retirer les champs inutiles des formulaires === Dans le fichier lib/form/{ForumTopic,ForumPost}Form.class.php dans la fonction configure(), ajoutez les lignes suivantes : unset($this->validatorSchema['created_at']); unset($this->widgetSchema['created_at']); Il est indispensable de désactiver le validateur et le widget. Vous pouvez aussi désactiver les deux en une seule opération en utilisant le formulaire comme un tableau PHP. unset($this['created_at'], $this['updated_at']); === Validation des Formulaires === http://www.symfony-project.org/forms/1_2/en/02-Form-Validation#chapter_02_validator_customization === Backend d'administration === php symfony generate:app backend http://www.symfony-project.org/book/1_2/14-Generators#chapter_14_administration === Formulaire de création de comptes sfGuard === http://lapin-blanc.net/14/10/2008/creation-compte-symfony-sfguard/ === Fonctions utiles === Faire un lien avec des options <?php echo link_to('Nom du Lien', 'module/action', array ('onmouseover' => "function('param')", 'onmouseout' => "function()")); ?> Insertion d'une image avec des options <?php echo image_tag('chemin/vers/image.png', array('id' => 'id_img', 'style' => 'border:0;', 'onmouseover' => "function('param')", 'onmouseout' => "HideTip()", 'alt' => "Attribut Alt")); ?> === Autres liens === http://www.symfony-project.org/jobeet/1_2/Doctrine/en/ http://www.symfony-project.org/plugins/sfDoctrineGuardPlugin : Gestion des utilisateurs http://www.symfony-project.org/plugins/sfDoctrineApplyPlugin : Gestion des inscriptions avec validation par mail http://www.symfony-project.org/forms/1_2/fr/ : Les formulaires http://www.doctrine-project.org/documentation/manual/1_1/en/introduction
Revenir à la page
Symfony
.
Affichages
Page
Discussion
Voir le texte source
Historique
Outils personnels
Connexion
Navigation
Accueil
Communauté
Actualités
Modifications récentes
Page au hasard
Aide
Rechercher
Boîte à outils
Pages liées
Suivi des pages liées
Pages spéciales