Articles avec le tag ‘YAML’

Symfony unsetAllExcept + i18n = unsetAllExceptI18n

Mardi 15 septembre 2009

Suite au commentaire de eddie sur l’article « Symfony – Formulaire en plusieurs étapes » voici un exemple d’un formulaire multilangue en plusieurs étapes.

symfony-logo

Petit rappel du contexte: symfony 1.2 + Doctrine

Dans le fichier schema.yml

Projet1Exemple:
  tableName: projet1_exemple
  actAs:
    I18n:
      fields: [titre, description, mots]
  columns:
    id:
      type: integer(4)
      primary: true
      unsigned: true
      notnull: true
      autoincrement: true
    fichier:
      type: string(255)
      unique: true
      notnull: true
    type:
      type: enum
      values: ['image', 'video', 'audio', 'document']
      notnull: true
      default: image
    titre:
      type: string(255)
      description:
      type: string(4000)
    mots:
      type: string(4000)

Nous avons donc deux champs communs à toutes les langues : fichier et type. Et trois champs multilangues : titre, description mots.

L’idée consisterait à mettre dans une première étape uniquement les champs : fichier (commun), titre (multilangue) et description (multilangue).

Dans le fichier actions.class.php

public function executeIndex(sfWebRequest $request) {
  $this->form = new Projet1ExempleForm()
}

Dans le fichier /lib/form/doctrine/BaseFormDoctrine.class.php, ajouter la fonction suivante :

public function unsetAllExceptI18n($keepFields = array(), $cultures = array(), $keepFieldsI18n = array()) {
  $keepFields[] = $cultures;
  foreach ($this as $key => $value)
    $baseFields[] = $key;
  $temp = array_diff($baseFields, $keepFields);
  foreach ($temp as $unsetField)
    unset($this[$unsetField]);
  $embeds = $this->getEmbeddedForms();
  foreach ($cultures as $culture)
    $formsI18n[$culture] = $embeds[$culture];
  foreach ($formsI18n as $culture => $formI18n)
  {
    foreach ($formI18n as $key => $value)
      $baseFieldsI18n[] = $key;
    $temp = array_diff($baseFieldsI18n, $keepFieldsI18n);
    foreach ($temp as $unsetField)
      unset($formI18n[$unsetField]);
    unset($this[$culture]);
    $this->embedForm($culture, $formI18n);
  }
}

Explication des paramètres :

  • -  »$keepFieds » : un tableau des champs ‘commun’ que vous souhaitez « garder ».
  • -  »$cultures » : un tableau des différentes cultures que vous voulez utiliser.
  • -  »$keepFieldsI18n » : un tableau des champs ‘multilangues’ que vous souhaitez « garder ».

Et enfin dans le fichier /lib/form/doctrine/Projet1ExempleForm.class.php

class Projet1ExempleForm extends BaseProjet1ExempleForm {
  public function configure() {
    //Introduire les formulaires multilangues dans un premier temps
    $this->embedI18n(array('fr'));
    $this->embedI18n(array('en'));
    //Garder uniquement les champs dont vous avez besoin
    $this->unsetAllExceptI18n(array('fichier'), array('fr', 'en'), array('titre', 'description'));
  }
}

Et enfin dans votre template

//Soit tout simplement
<?php echo $form;?>

//ou
<?php echo $form['fichier']->renderLabel()?>
<?php echo $form['fichier']->render()?>
<?php echo $form['fr']['description']->renderLabel()?>
<?php echo $form['fr']['description']->render()?>
//...

Voici un aperçu du résultat : Capture_d_ecran_2009-09-15_a_19.25.01

Vous pouvez ensuite continuer de la même manière pour les prochaines étapes de votre formulaire.

N’hésitez pas à me solliciter pour plus d’explications.

To be continued…

Framework Symfony

Mardi 4 août 2009

Présentation

Symfony est un framework PHP 5 qui permet d’accélérer les temps de développement d’applications Web. Il permet d’avoir un site robuste, évolutif, et sécurisé, garantissant la pérennité de votre application dans le temps.

symfony-logo

Spécifications

Voici une liste non exhaustive de ce que propose le framework Symfony :

  • - Model MVC
  • - Générateur de back-office
  • - Internationalisation
  • - ORM (Mapping objet-relationnel) embarqué : Doctrine ou Propel.
  • - Création et utilisation de plugins
  • - Système de cache
  • - Moteur d’URL rewriting performant
  • - Fichiers de configuration (Langage YAML)

Pourquoi le choix de ce framework?

Je travaille actuellement dans une agence Web qui disposait jusqu’à présent de son propre framework maison. Actuellement en pleine expansion, nous avons pris la décision de migrer vers le framework Symfony pour plusieurs raisons:

  • - Accélérer nos temps de développement.
  • - DRY (Don’t Repeat Yourself) : Ne pas réinventer la roue.
  • - Capitaliser notre expérience en exportant certaines briques de code sous forme de Plugins pour d’autres projets.
  • - Se concentrer plus sur l’aspect métier des applications à développer.
  • - Recruter plus facilement des développeurs utilisant ou connaissant Symfony plutôt que perdre du temps pour les former sur notre framework maison.

Prise en main de Symfony

Je développe depuis quelques mois sous Symfony, et le chemin n’a pas toujours été facile… Je découvre et j’apprends tous les jours avec de framework qui ne cessera jamais de m’étonner. Voici quelques conseils à ceux qui souhaiterais se lancer dans ce framework :

  • - Suivre le tutoriel Jobeet présent sur le site de Symfony (je vous conseille l’ORM Doctrine pour la simple et bonne raison qu’il sera en standard dans les nouvelles versions de Symfony). Tutoriel pour démarrer avec Symfony
  • - Pour le développement de vos applications, je vous conseille fortement l’utilisation d’un outil de débugger tel que xdebug ou zend debugger, permettant de comprendre la logique de Symfony notamment pour tout ce qui concerne la soumission des formulaires.
  • - Et enfin n’hésitez pas à faire appel à la communauté Symfony très active : Groupe Google Symfony et également Canal IRC Fr

Liens utiles

Site officiel Symfony
Symfony sur Wikipedia
Tutoriel pour démarrer avec Symfony

Centralisation des réalisations faites avec le framework Symfony

to be continued…