jay's help to create

Aller au contenu | Aller au menu | Aller à la recherche

jeudi, mars 31 2011

Les relations many to many avec doctrine et symfony 1.4

Ca fait longtemps (très longtemps) que je n’avais pas écrit sur ce blog.

J’ai eu l’occasion de passer à symfony 1.4 depuis et de voir les changements.
Le plus gros d’entre eux c’est bien sur de passer de l’ORM propel à l’ORM doctrine.

Il faut revoir pas mal de ses habitudes, mais il faut avouer que les relations et les formulaires imbriqués sont bien mieux gérés maintenant.
Enfin à condition de bien concevoir son schema.yml.

C’est là le principal problème, si le schéma est bien fait, symfony fait tout automatiquement. Sinon il faut tout le temps bricoler.
Ors, j’ai lut beaucoup de solutions qui merdaient d’une façon ou d’une autre avant de trouver celle qui répondait vraiment à mes besoins.

Voici donc un exemple de relation en many-to-many dans le schema.yml :

 

[php]Site:
  columns:
    id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    url:
      type: varchar(255)
      notnull: true
    libelle:
      type: varchar(255)
      notnull: true
  relations:
    Lien:
      class: Site
      local: site_id
      foreign: lien_id
      refClass: LienSite
      onDelete: CASCADE
Lien:
  columns:
    id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    url:
      type: varchar(255)
      notnull: true
      unique: true
    libelle:
      type: varchar(255)
      notnull: true
    description:
      type: string(128)
  relations:
    Site:
      class: Lien
      local: lien_id
      foreign: site_id
      refClass: LienSite
      onDelete: CASCADE
 
LienSite:
  tableName: site_has_lien
  columns:
    site_id:
      type: integer(4)
      primary: true
    lien_id:
      type: integer(4)
      primary: true
  indexes:
    fk_site_has_lien_lien1:
      fields: [lien_id]
    fk_site_has_lien_sites1:
      fields: [site_id]

 

 

Pour les deux tables concernées, on ajoute donc les relations vers l’autre table, en indiquant la table servant de référence entre les deux

 [php]relations:
    Site:                                            # le nom de la relation, il sera utilize lors
de l’appel du formulaire par l’admin generator par exemple. 
      class: Lien                              #La classe à laquelle se réfere votre relation, dans une relation many to many, c’est la même classe (Lien pour une relation dans la table lien etc…)
      local: lien_id                        # l’id qui represente la primary key de cette table dans la table référence
      foreign: site_id                  # l’id de l’autre table en relation représenté dans la table de reference
      refClass: LienSite              # la table de référence
      onDelete: CASCADE        # une contrainte classique pour éviter les problèmes ;)
 

Si on s’y prend comme cela, il n’y a ensuite plus rien à faire dans les formulaires, tout est géré automatiquement.
Le seul réglage dans mon cas est de rendre un champs unset dans un des deux cas, si je ne veux pas que le champs de lien s’affiche sur le formulaire des sites…

Vous aurez donc un widget « site_list » dans votre formulaire lien, et un widget « lien_list » dans votre formulaire site.

lundi, septembre 13 2010

Comparatif des frameworks php 2 - le livre blanc de Clever Age

Après le comparatif de l’agence smile, voici le comparatif des framework php de Clever Age.
Complémentaire et plus récent, il décrit longuement les avantages généraux des framework php.
Avec ces deux livres blancs, vous aurez toutes les pièces pour choisir le framework qui conviendra à vos projets.

Lire la suite...

mercredi, juillet 14 2010

Déployer son application Symfony en Production

Symfony c’est super ! 
Mais ça complexifie un peu les choses. 
Quand il s’agit de mettre l’application en production c’est même carrément énervant ! 

Une fois que votre application est développée, il faut la mettre sur un serveur de prod.
Et malheureusement, il ne suffit pas de copier les fichiers et de dupliquer la base de données.
Voici les principales étapes pour migrer votre application Symfony

Lire la suite...

Générateur de miniatures