Toute l'actualité francophone sur PHP en un seul flux

Novembre 2009 – Hello Design: Joomla 1.6 alpha2

Le CMS Joomla revient au devant de la scène PHP avec une nouvelle version 1.6 alpha 2, ce qui annonce de bonne horizon.

Cette nouvelle version doit répondre aux attentes des utilisateurs de Joomla, qui sont :

  • ACL: gestion des accès pour des autorisations globales mais aussi pour des autorisations à un élément spécifiques, groupes d'utilisateurs variables et les utilisateurs membres de plus d'un groupe d'utilisateurs, les autorisations sont héritées très vite.
  • Profil de l'utilisateur extensible, vue du profil en frontend, les paramètres d'utilisateurs sont extensibles.
  • Com_content : mises en page sans tableaux
  • Modules com_content améliorées (mod_articles_archive, mod_articles_latest, mod_articles_popular)
  • Plugin de lien entre les articles pour les éditeurs
  • Nouveaux templates frontend (atomic) et backend (bluestork)
  • Nouvel uploadeur pour le gestionnaire de média

Communiqué officiel : http://www.joomla.fr/les-news-joomla/13-news-officielles/972-joomla-16-alpha-2.html

Novembre 2009 – Dur Comme Faire: Zend Studio et Ubuntu Karmic

Décidément la nouvelle mouture d'Ubuntu pose des problèmes aux produits Zend. Après Zend Server qui refuse de s'installer, voici que certains boutons sont inopérants dans la dernière version de Zend Studio. Il existe là encore un contournement en attendant la correction du bug de GTK à...

Novembre 2009 – Dur Comme Faire: Zend Studio et Ubuntu Karmic

Décidément la nouvelle mouture d’Ubuntu pose des problèmes aux produits Zend. Après Zend Server qui refuse de s’installer, voici que certains boutons sont inopérants dans la dernière version de Zend Studio.

Il existe là encore un contournement en attendant la correction du bug de GTK à l’origine du problème. Pour cela, il suffit de créer un script contenant les lignes suivantes et de l’utiliser pour lancer Zend Studio :

#!/bin/bash export GDK_NATIVE_WINDOWS=1 <CHEMIN>/ZendStudio

Remplacez <CHEMIN> par le chemin vers votre exécutable Zend Studio et le tour est joué.

Novembre 2009 – Dur Comme Faire: Zend Studio et Ubuntu Karmic

Décidément la nouvelle mouture d’Ubuntu pose des problèmes aux produits Zend. Après Zend Server qui refuse de s’installer, voici que certains boutons sont inopérants dans la dernière version de Zend Studio.

Il existe là encore un contournement en attendant la correction du bug de GTK à l’origine du problème. Pour cela, il suffit de créer un script contenant les lignes suivantes et de l’utiliser pour lancer Zend Studio :

#!/bin/bash export GDK_NATIVE_WINDOWS=1 <CHEMIN>/ZendStudio

Remplacez <CHEMIN> par le chemin vers votre exécutable Zend Studio et le tour est joué.

Novembre 2009 – Dur Comme Faire: Revue de presse PHP du 02/11/09

Après une longue pause estivale (et un peu plus), voici le retour de la revue de presse hebdomadaire. Le but est de vous faire découvrir ce qui se dit d'intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous. Et parce qu'il n'y a pas que PHP...

Novembre 2009 – Dur Comme Faire: Revue de presse PHP du 02/11/09

Après une longue pause estivale (et un peu plus), voici le retour de la revue de presse hebdomadaire.

Le but est de vous faire découvrir ce qui se dit d’intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous. Et parce qu’il n’y a pas que PHP au monde, vous trouverez également un article important mais dans un domaine libre et n’ayant pas forcément de rapport avec PHP.

  • How to Create Totally Secure Cookies
    Sécuriser les cookies, et donc souvent par rebond les sessions, est essentiel mais encore faut-il bien comprendre les mécanismes mis en jeu.
    Le site Carsonified explique comment fonctionnent les cookies puis propose quelques moyens de sécuriser leur usage :
    • Limiter l’accès au cookie au strict minimum ;
    • Bien choisir les informations à y stocker ;
    • Protéger le cookie des XSS.
  • Symfony expliqué à ma maman
    Cette série de billets vise à expliquer à un néophyte ce qu’est le framework Symfony les rappels généraux s’appliquent à la plupart des frameworks PHP.
  • Why will Symfony 2.0 finally use PHP 5.3?
    Fabien Potencier, le créateur du framework Symfony, explique pourquoi après mûre réflexion la version 2.0 de ce framework nécessitera PHP 5.3.
    Ce choix est en phase avec ceux de Zend Framework et CakePHP et les éléments de sa réflexion font probablement écho aux interrogations de nombreux architectes PHP.
  • Avoiding Notices: When to Use isset() and empty()
    Si l’ont n’y prend pas garde, l’évaluation de conditions provoque parfois des notices. Pour éviter cela, il est recommandé d’utiliser les fonctions isset() ou empty(). Bien que souvent équivalentes, leur usage varie sensiblement et il est bon de bien comprendre leur fonctionnement pour les utiliser à bon escient.
  • Five Tips To Make Good Object-Oriented Code Better
    Si utiliser la programmation orientée objet est une bonne chose, bien l’utiliser est encore mieux. Brandon Savage nous propose cinq moyens d’améliorer son code avec au programme :
    • Utiliser beaucoup d’objets ;
    • Utiliser des interfaces pour rendre les API prévisibles ;
    • Utiliser l’injection de dépendance ;
    • Préférer la composition à l’héritage ;
    • Créer des classes faiblement couplées.

Et voici l’article bonus de la semaine :

Fake Rocks, Salami Commanders, and Just Enough to Start
On a probablement tous vécu un jour le syndrome de la feuille blanche. Cette peur de se lancer qui nous pousse souvent à choisir la facilité et à remettre au lendemain.
Lutter contre la procrastination, puisque c’est le nom de ce comportement, n’est pas facile et il n’y a pas de remède miracle. Cependant, un peu de méthode et beaucoup de courage peuvent en venir à bout.

Novembre 2009 – Dur Comme Faire: Revue de presse PHP du 02/11/09

Après une longue pause estivale (et un peu plus), voici le retour de la revue de presse hebdomadaire.

Le but est de vous faire découvrir ce qui se dit d’intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous. Et parce qu’il n’y a pas que PHP au monde, vous trouverez également un article important mais dans un domaine libre et n’ayant pas forcément de rapport avec PHP.

  • How to Create Totally Secure Cookies
    Sécuriser les cookies, et donc souvent par rebond les sessions, est essentiel mais encore faut-il bien comprendre les mécanismes mis en jeu.
    Le site Carsonified explique comment fonctionnent les cookies puis propose quelques moyens de sécuriser leur usage :
    • Limiter l’accès au cookie au strict minimum ;
    • Bien choisir les informations à y stocker ;
    • Protéger le cookie des XSS.
  • Symfony expliqué à ma maman
    Cette série de billets vise à expliquer à un néophyte ce qu’est le framework Symfony les rappels généraux s’appliquent à la plupart des frameworks PHP.
  • Why will Symfony 2.0 finally use PHP 5.3?
    Fabien Potencier, le créateur du framework Symfony, explique pourquoi après mûre réflexion la version 2.0 de ce framework nécessitera PHP 5.3.
    Ce choix est en phase avec ceux de Zend Framework et CakePHP et les éléments de sa réflexion font probablement écho aux interrogations de nombreux architectes PHP.
  • Avoiding Notices: When to Use isset() and empty()
    Si l’ont n’y prend pas garde, l’évaluation de conditions provoque parfois des notices. Pour éviter cela, il est recommandé d’utiliser les fonctions isset() ou empty(). Bien que souvent équivalentes, leur usage varie sensiblement et il est bon de bien comprendre leur fonctionnement pour les utiliser à bon escient.
  • Five Tips To Make Good Object-Oriented Code Better
    Si utiliser la programmation orientée objet est une bonne chose, bien l’utiliser est encore mieux. Brandon Savage nous propose cinq moyens d’améliorer son code avec au programme :
    • Utiliser beaucoup d’objets ;
    • Utiliser des interfaces pour rendre les API prévisibles ;
    • Utiliser l’injection de dépendance ;
    • Préférer la composition à l’héritage ;
    • Créer des classes faiblement couplées.

Et voici l’article bonus de la semaine :

Fake Rocks, Salami Commanders, and Just Enough to Start
On a probablement tous vécu un jour le syndrome de la feuille blanche. Cette peur de se lancer qui nous pousse souvent à choisir la facilité et à remettre au lendemain.
Lutter contre la procrastination, puisque c’est le nom de ce comportement, n’est pas facile et il n’y a pas de remède miracle. Cependant, un peu de méthode et beaucoup de courage peuvent en venir à bout.

Novembre 2009 – Prendre un Café: An Interactive PHP Shell: phpsh

Just found this nice project contributed by the Facebook team, phpsh. Basically, it’s an interactive and advanced command line interface to php, a kind of super-php -r similar to what you can find in Python or Ruby. Ironically enough, phpsh is mostly written in Python, by the way.

To install phpsh, just get it from github[1]:

$ git clone git://github.com/facebook/phpsh.git
$ cd phpsh
$ python setup.py build
$ sudo python setup.py install

To run phpsh:

$ phpsh
Starting php
type 'h' or 'help' to see instructions & features
php> ="hello world"
hello world
php> =2 + 2
4
php> $a = 8

php> =$a
8

Note that you don’t have to open or close <?php tags, you can print something just by prepending an = sign to the command, and no need to type semicolum at the end of a call. Easy[2].

You can access a function documentation by just prepending the d keyword to its name:


php> d strlen

# strlen

(PHP 4, PHP 5)

strlen -- Get string length

### Description

int strlen ( string $string )

Returns the length of the given string . 

### Parameters

string     

The [string][1] being measured for length. 

### Return Values

The length of the string on success, and 0 if the string is empty. 

### 

   [1]: #language.types.string

You can define your own classes and functions, and run them:

php> function foo($a){echo $a.'!';}
php> foo('bar')
bar!

Same goes for classes:

php> class Foo {public function bar($a){echo $a.'!';}}
php> $f = new Foo()
php> $f->bar('baz')
baz!

You can even execute shell command from there:

php> ! ls -la

Of course, you can import include and require files. As a concrete example, let’s roughly play with the symfony API:

php> ! symfony -V
symfony version 1.2.2-DEV (/Users/niko/Sites/vendor/symfony12/lib)
php> c /Users/niko/Sites/vendor/symfony12/lib/autoload/sfCoreAutoload.class.php
Extra includes are: ['/Users/niko/Sites/vendor/symfony12/lib/autoload/sfCoreAutoload.class.php']
php> sfCoreAutoload::register()
php> =sfYaml::load('foo: bar')
array(
  "foo" => "bar",
)
php> =sfYaml::dump(array('foo' => array('bar' => 'baz')))
"foo:\n  bar: baz\n"

Last but not least, when enough playing, type q or press ctrl + d to quit phpsh.

Notes

[1] So yeah, so you need git. And Python, of course.

[2] Anybody putting "rather use python then" will have serious troubles, even if I strongly agree.


Ce billet intitulé An Interactive PHP Shell: phpsh a été rédigé par Nicolas Perriault et publié sur le blog Prendre un Café sous licence Creative Commons BY-NC-SA.

Novembre 2009 – Rom's blog: PHP 5.3 sous Windows, plus de nouveautés qu’on le croit!

J’ai dernièrement eu l’occasion de rencontrer Hank JANSSEN de Microsoft qui a participé, avec Pierre JOYE à la publication de PHP 5.3 sous Windows. On ne s’en rend pas compte car peu de communication a été faite autour mais PHP 5.3 en environnement Windows est un véritable reconstruction du projet. Un travail important de mise à jour et de modification a été accompli et est toujours en cours.

 
La branche PHP 5.3 a introduit un nombre important de nouvelles fonctionnalités. La plupart d’entre nous les connaissent maintenant et si ce n’est toujours pas le cas, vous pouvez les consulter sur le site http://php.net/releases/5_3_0.php.

 
Ce que l’on sait moins, c’est que que cette version a été l’occasion pour les développeurs travaillant sur la version Windows de refondre complétement le projet, reconstruire une plateforme de compilation industrialisée et facile à reproduire et surtout, faire de la version Windows une véritable distribution optimisée pour cet environnement et non plus un simple portage de la version Linux.

 
Commençons par regarder le travail effectué sur le code de PHP en lui-même et ses dépendances. Les distributions de PHP pour Windows jusqu’à PHP 5.2 étaient basées sur un socle monté dans les années 90 et ayant très peu évoluée depuis. On y retrouvait notamment :

  • des librairies n’ayant pas été mise à jour et recompilées depuis très longtemps, les plus vieux binaires identités datant de plus de 12 ans,
  • des binaires dont le code source était tout simplement perdu et donc impossible à recompiler,
  • un code ayant peu profité des mises à jour de sécurité dans les 10 dernières années,
  • l’utilisation de librairies non prévues pour Windows et fonctionnant grâce à de l’émulation ou encore certaines reproduisant des fonctionnalités déjà présentes dans Windows sans en tirer partie,
  • un code optimisé pour Windows 98!

Je ne vais rentrer dans les détails, mais tout cela a été repris, mis à jour, redéveloppé afin de le rendre plus efficace et profiter des particularités de Windows. Un long travail de plusieurs mois dont le résultat est une version optimisée pour cette plateforme, qui peut maintenant passer le PHP test suite (ce qui n’était plus le cas depuis un moment) et être considéré comme une véritable branche de PHP.

Côté plateforme de compilation, le travail effectué a été tout aussi important. La plateforme existante a tout simplement été complétement désassemblée pour être reconstruite à partir de zéro.

Autrefois basée sur un portage de la compilation Linux avec des processus adaptés pour aboutir à quelque chose qui fonctionne, la nouvelle plateforme profite elle d’une véritable industrialisation, facile à reproduire et permettant à chacun de faire des ‘build’ spécifiques à un environnement Windows donné. Les outils utilisés ont tous été actualisés et permettent de profiter de nombreuses optimisation qui n’étaient pas possibles auparavant offrant ainsi de meilleures performances à PHP.

Notons que la compilation est maintenant possible en VC9. Ok, cela ne nous sera pas d’une grande utilité tant que les binaires d’Apache ne seront pas construits également avec ce compilateur, mais il semblerait que ce soit en cours de réalisation.

Seul point noir, la nouvelle plateforme ne compile pas encore les extensions PECL. Mais le travail sur cette partie est en cours et j’espère bientôt voir réapparaître le pecl4win ou un site équivalent.

Enfin, notez qu’un site dédié à Windows existe maintenant dans les « php.net sites » :

http://windows.php.net

Pour conclure PHP 5.3 dispose maintenant d’une véritable version pour Windows avec de bien meilleures performances et des possibilités d’utilisation plus vastes. Bien sûr, je ne m’aventurerais pas à la comparer à la version Linux (je crois que je viens de lancer un troll), que ce soit en terme de qualité ou de performances, mais cette évolution reste quelque chose de très positif. L’ouverture vers toutes les plateformes est un plus pour PHP et ne peut que lui être profitable.

Note : merci à Hank pour les slides qu’il m’a fait parvenir et qui m’ont permis d’écrire ce petite article.

Novembre 2009 – Rom's blog: PHP 5.3 sous Windows, plus de nouveautés qu’on le croit!

J’ai dernièrement eu l’occasion de rencontrer Hank JANSSEN de Microsoft qui a participé, avec Pierre JOYE à la publication de PHP 5.3 sous Windows. On ne s’en rend pas compte car peu de communication a été faite autour mais PHP 5.3 en environnement Windows est un véritable reconstruction du projet. Un travail important de mise à jour et de modification a été accompli et est toujours en cours.

 
La branche PHP 5.3 a introduit un nombre important de nouvelles fonctionnalités. La plupart d’entre nous les connaissent maintenant et si ce n’est toujours pas le cas, vous pouvez les consulter sur le site http://php.net/releases/5_3_0.php.

 
Ce que l’on sait moins, c’est que que cette version a été l’occasion pour les développeurs travaillant sur la version Windows de refondre complétement le projet, reconstruire une plateforme de compilation industrialisée et facile à reproduire et surtout, faire de la version Windows une véritable distribution optimisée pour cet environnement et non plus un simple portage de la version Linux.

 
Commençons par regarder le travail effectué sur le code de PHP en lui-même et ses dépendances. Les distributions de PHP pour Windows jusqu’à PHP 5.2 étaient basées sur un socle monté dans les années 90 et ayant très peu évoluée depuis. On y retrouvait notamment :

  • des librairies n’ayant pas été mise à jour et recompilées depuis très longtemps, les plus vieux binaires identités datant de plus de 12 ans,
  • des binaires dont le code source était tout simplement perdu et donc impossible à recompiler,
  • un code ayant peu profité des mises à jour de sécurité dans les 10 dernières années,
  • l’utilisation de librairies non prévues pour Windows et fonctionnant grâce à de l’émulation ou encore certaines reproduisant des fonctionnalités déjà présentes dans Windows sans en tirer partie,
  • un code optimisé pour Windows 98!

Je ne vais rentrer dans les détails, mais tout cela a été repris, mis à jour, redéveloppé afin de le rendre plus efficace et profiter des particularités de Windows. Un long travail de plusieurs mois dont le résultat est une version optimisée pour cette plateforme, qui peut maintenant passer le PHP test suite (ce qui n’était plus le cas depuis un moment) et être considéré comme une véritable branche de PHP.

Côté plateforme de compilation, le travail effectué a été tout aussi important. La plateforme existante a tout simplement été complétement désassemblée pour être reconstruite à partir de zéro.

Autrefois basée sur un portage de la compilation Linux avec des processus adaptés pour aboutir à quelque chose qui fonctionne, la nouvelle plateforme profite elle d’une véritable industrialisation, facile à reproduire et permettant à chacun de faire des ‘build’ spécifiques à un environnement Windows donné. Les outils utilisés ont tous été actualisés et permettent de profiter de nombreuses optimisation qui n’étaient pas possibles auparavant offrant ainsi de meilleures performances à PHP.

Notons que la compilation est maintenant possible en VC9. Ok, cela ne nous sera pas d’une grande utilité tant que les binaires d’Apache ne seront pas construits également avec ce compilateur, mais il semblerait que ce soit en cours de réalisation.

Seul point noir, la nouvelle plateforme ne compile pas encore les extensions PECL. Mais le travail sur cette partie est en cours et j’espère bientôt voir réapparaître le pecl4win ou un site équivalent.

Enfin, notez qu’un site dédié à Windows existe maintenant dans les « php.net sites » :

http://windows.php.net

Pour conclure PHP 5.3 dispose maintenant d’une véritable version pour Windows avec de bien meilleures performances et des possibilités d’utilisation plus vastes. Bien sûr, je ne m’aventurerais pas à la comparer à la version Linux (je crois que je viens de lancer un troll), que ce soit en terme de qualité ou de performances, mais cette évolution reste quelque chose de très positif. L’ouverture vers toutes les plateformes est un plus pour PHP et ne peut que lui être profitable.

Note : merci à Hank pour les slides qu’il m’a fait parvenir et qui m’ont permis d’écrire ce petite article.

Novembre 2009 – PHP Index: 5 ans de Firefox à Paris

Le 9 novembre prochain, Firefox fêtera ses 5 ans.

L'équipe de Mozilla Europe organisera une fête à Paris le lundi 9 novembre pour marquer cette date. L'événement aura lieu de 20h à 23h au Conseil Régional d’Île-de-France à l'adresse 33 rue Barbet-de-Jouy, 75007 Paris, métro Saint François Xavier (ligne 13).

L'inscription est possible ici. Attention, votre identité sera vérifiée à l'entrée, le nombre de place est limité.

Pour plus d'informations, visitez le site de Mozilla.

Novembre 2009 – tigrou/pwet.fr: Migration du Planet eZ Publish.fr vers eZ Publish 4.2

Je viens de migrer le Planet eZ Publish.fr vers eZ Publish 4.2. Probablement l'une des mises à jour eZ Publish les plus simples et les plus rapides (moins de 2 heures) que j'ai faite. Il faut dire que la procédure de mise à jour de la version 4.1 à la version 4.2 est plutôt plus simple que d'habitude et en plus le site est très simple, il n'utilise aucune des fonctionnalités dont le comportement a changé entre les versions 4.1 et 4.2 et finalement peu de fonctionnalités avancées.

Au passage, les nouveautés de la version 4.2 sont nombreuses mais l'amélioration des performances après un vidage complet des caches devrait ravir les développeurs au quotidien :-), en tout cas j'ai bien vu la différence pendant la migration.

Novembre 2009 – Kamelot Blog: Une bonne raison de plus de venir au forum php (et de rester un jour de plus)

Dans 4 jours commence le Forum PHP 2009 à Paris.

Voici une bonne raison de plus de venir et de rester un jour de plus ...

Le samedi 14 novembre, il risque d'y avoir de sacrées bousculades à Paris. Ce jour-là, un site Internet va jeter son argent par les fenêtres !

Si d'aventure vous vous trouvez sur le chemin d'un bus à l'anglaise siglé "Mailorama" le 14 novembre à Paris, ne le quittez pas d'une semelle et vous aurez la chance de vous trouver au bon endroit au bon moment.

En effet, c'est ce jour-là qu'aura lieu la grande opération de street marketing initiée par Mailorama. A l'initiative de Cyril Dubreau, fondateur et dirigeant du site, ce sont pas moins de 5000 bourses contenant de 5 à 500 euros qui vont ainsi se déverser dans les rues de la capitale et aller à ceux qui voudront bien les prendre.

HoaxBuster - Les euros se ramassent à la pelle !

Novembre 2009 – Apprendre-PHP.com: Génération de PDF avec le Zend Framework

La génération de documents PDF bien formatés avec PHP est une tâche plutôt difficile. Il existe habituellement deux approches principales. Avec suffisamment de temps et de patience, ces deux approches font l'affaire, mais laissent tout de même à désirer :

Novembre 2009 – Hello Design: Forum PHP... en approche

Après de mois de travail et de préparation avec tous les membres du bureau et organisation de l'AFUP. Le Forum PHP 2009 pointe son nez.

L'évènement est le 12 et 13 novembre 2009 à la cité des sciences avec :

  • - Plus de places
  • - Plus de salles
  • - Plus de conférences
  • - Plus de surprises
  • - Pour accueillir plus de monde
  • - etc...

Mais il n'est pas trop tard de venir au forum et surtout vous inscrire le programme de cette année, vous ne le retrouverez que sur place.

Cette année sera différente de l'an passée et de l'année prochaine...

Le mieux c'est dans le vif du sujet et surplace pour avoir plein les yeux.

Alors à jeudi.... 12

http://www.afup.org/forumphp

Novembre 2009 – Dur Comme Faire: Ubuntu Karmic et PHP sont dans un bateau...

... et ça ne se passe visiblement pas très bien. Après les problèmes avec Zend Server et Zend Studio, voilà maintenant que c'est PHP et par ricochet PEAR qui ont des problèmes avec la dernière version d'Ubuntu. Le problème vient de la librarie zlib. Certaines de ses fonctionnalités ne...

Novembre 2009 – Dur Comme Faire: Ubuntu Karmic et PHP sont dans un bateau…

… et ça ne se passe visiblement pas très bien. Après les problèmes avec Zend Server et Zend Studio, voilà maintenant que c’est PHP et par ricochet PEAR qui ont des problèmes avec la dernière version d’Ubuntu.

Le problème vient de la librarie zlib. Certaines de ses fonctionnalités ne sont plus disponibles dans PHP ce qui provoque l’échec silencieux du package PEAR Archive_Tar, empêchant toute installation de package PEAR.

Heureusement, il existe un contournement. Il suffit d’ajouter l’argument « -Z » afin de demander l’installation de packages non compressés :

pear install -Z phpdocumentor

Novembre 2009 – Dur Comme Faire: Ubuntu Karmic et PHP sont dans un bateau…

… et ça ne se passe visiblement pas très bien. Après les problèmes avec Zend Server et Zend Studio, voilà maintenant que c’est PHP et par ricochet PEAR qui ont des problèmes avec la dernière version d’Ubuntu.

Le problème vient de la librarie zlib. Certaines de ses fonctionnalités ne sont plus disponibles dans PHP ce qui provoque l’échec silencieux du package PEAR Archive_Tar, empêchant toute installation de package PEAR.

Heureusement, il existe un contournement. Il suffit d’ajouter l’argument « -Z » afin de demander l’installation de packages non compressés :

pear install -Z phpdocumentor

Novembre 2009 – Dur Comme Faire: Revue de presse PHP du 10/11/09

Comme chaque semaine, voici la revue de presse hebdomadaire pour vous faire découvrir ce qui se dit d'intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous. Et parce qu'il n'y a pas que PHP au monde, vous trouverez également un article...

Novembre 2009 – Dur Comme Faire: Revue de presse PHP du 10/11/09

Comme chaque semaine, voici la revue de presse hebdomadaire pour vous faire découvrir ce qui se dit d’intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous.

Et parce qu’il n’y a pas que PHP au monde, vous trouverez également un article important mais dans un domaine libre et n’ayant pas forcément de rapport avec PHP.

  • PHP Concepts: The Difference Between Functions & Language Constructs
    Samuel Folkes explique la différence subtile qui existe entre fonctions et constructions de langage.
  • WDependency
    WDependency est un outil en ligne de commande, développé par Olivier Hoareau, qui analyse une application PHP afin de déterminer les dépendences entre les différents éléments qui la composent. Une fois l’analyse faite, il est possible de l’exporter sous forme d’image ou de tableau PHP pour exploiter ces données ailleurs.
  • Exceptional PHP: Introduction to Exceptions
    Brandon Savage nous gratifie une fois de plus d’un excellent article. Il s’attaque cette fois aux exceptions, cette fonctionnalité introduite dans la version 5 de PHP et dont l’usage peine à être généralisé.
  • Refactoring PHP Code
    Voici une courte introduction au remaniement de code en PHP. Cette pratique consiste à simplifier et remodeler son code en vue de l’améliorer.
  • PHP 5.3 sous Windows, plus de nouveautés qu’on le croit!
    Romain Bourdon, un collègue mais surtout le créateur de Wamp Server revient sur aspect passé inaperçu de PHP 5.3 : l’amélioration significative de son support de Windows. Longtemps délaissée, la version pour ce système d’exploitation était très en retard en terme de qualité et d’industrialisation du processus de publication.

Et voici l’article bonus de la semaine :

Josianne et Robert sont dans un projet
Le blog d’Octo nous narre l’histoire de Josianne et Robert qui travaillent sur le même projet. Josianne est une analyste expérimentée et connaît bien la boutique. Robert connait bien l’environnement technique. Nous allons voir comment certaines méthodes de gestion même avec les bonnes personnes peuvent mener à des conflits et des échecs.

Novembre 2009 – Dur Comme Faire: Revue de presse PHP du 10/11/09

Comme chaque semaine, voici la revue de presse hebdomadaire pour vous faire découvrir ce qui se dit d’intéressant sur PHP. Il s’agit d’articles en français ou en anglais que j’aimerais partager avec vous.

Et parce qu’il n’y a pas que PHP au monde, vous trouverez également un article important mais dans un domaine libre et n’ayant pas forcément de rapport avec PHP.

  • PHP Concepts: The Difference Between Functions & Language Constructs
    Samuel Folkes explique la différence subtile qui existe entre fonctions et constructions de langage.
  • WDependency
    WDependency est un outil en ligne de commande, développé par Olivier Hoareau, qui analyse une application PHP afin de déterminer les dépendences entre les différents éléments qui la composent. Une fois l’analyse faite, il est possible de l’exporter sous forme d’image ou de tableau PHP pour exploiter ces données ailleurs.
  • Exceptional PHP: Introduction to Exceptions
    Brandon Savage nous gratifie une fois de plus d’un excellent article. Il s’attaque cette fois aux exceptions, cette fonctionnalité introduite dans la version 5 de PHP et dont l’usage peine à être généralisé.
  • Refactoring PHP Code
    Voici une courte introduction au remaniement de code en PHP. Cette pratique consiste à simplifier et remodeler son code en vue de l’améliorer.
  • PHP 5.3 sous Windows, plus de nouveautés qu’on le croit!
    Romain Bourdon, un collègue mais surtout le créateur de Wamp Server revient sur aspect passé inaperçu de PHP 5.3 : l’amélioration significative de son support de Windows. Longtemps délaissée, la version pour ce système d’exploitation était très en retard en terme de qualité et d’industrialisation du processus de publication.

Et voici l’article bonus de la semaine :

Josianne et Robert sont dans un projet
Le blog d’Octo nous narre l’histoire de Josianne et Robert qui travaillent sur le même projet. Josianne est une analyste expérimentée et connaît bien la boutique. Robert connait bien l’environnement technique. Nous allons voir comment certaines méthodes de gestion même avec les bonnes personnes peuvent mener à des conflits et des échecs.

Novembre 2009 – Kamelot Blog: RESTfull au forum php

mes notes au vol.

REST parti d'un thèse à lire : Roy Fielding 2000

  • Ressource adressable -> url
  • Interface uniforme -> GET , POST, PUT, DELETE
  • Représentation multiple -> je transmet une représentation de ce qui est identifié
  • PUT url <- sous entends que je connais l'url que la ressource aura, avant même qu'elle n'existe
  • POST url <- sous entends que je ne connais pas encore l'url que la ressource aura, elle me sera indiquée dans le retour.

GET et PUT devraient TOUJOURS retourner la même chose. POST jamais.

HEAD et OPTIONS HEAD -> comme GET mais on ne reçoit en retour que les header, pas le corp de réponse

OPTIONS url

retourne les commandes utilesable sur l'url

En retour, on a 404, 201, 303, 500 , .... 303 <- url de ce que post a créé


Dans la requete, on peut envoyer un "accept" avec les mime/type accepté en retour


Stateless

-> chaque requête contient TOUTES les infos (pas de sessions)


lire pour approfondir : connexité


Faites du bon REST sur GET -> énormément d'occasion d'avoir du cache. -> idéal dans les favoris. -> clients plus faciles.


Les faux REST : POX ou REST-RPC (Flickr, Upcomming.org,...) Twitter parce qu'il utilise que GET POST


M*rde il ne reste que 5 minutes


REST et php : pas de $_PUT


Zend_Server_Rest <- en fait c'est POX Zend_Rest_Route <- C'est nouveau.

Novembre 2009 – Kamelot Blog: PHPBenelux meeting à Rijswijk (NL) le 24 Novembre 2009

The PHPBenelux meeting will be tuesday 24 november at the office of Atos Origin in Rijswijk (near The Hague).

Bert Boerland (Drupal boardmember) will talk about performance issues with Drupal (and how to solve them).

Arnoud Engelfriet (internet lawyer) will talk about about the GPL license.

You are welcome to join this meeting.

Novembre 2009 – PHP Index: Zend et Varien s’associent pour fournir une solution PHP et e-commerce tout-en-un

Magento, la très populaire solution e-commerce de Varien, sera fournie avec
l’environnement PHP Zend Server Community Edition

BARGENTO 3, PARIS – Zend Technologies, Inc., the PHP company, et Varien, société qui développe Magento, la plateforme e-commerce la plus en croissance, annoncent ce jour qu’ils s’associent afin de faciliter l’évaluation, le développement et le déploiement d’une application e-commerce flexible pour les petites et moyennes entreprises. Le résultat de ce nouveau partenariat est que la version communautaire de Magento™, la plateforme e-commerce de Varien sera fournie avec l’édition communautaire de Zend Server, le serveur d’applications Web en PHP ultra-performant de Zend.
Les deux sociétés ont également annoncé que les équipes Zend et Varien et les communautés Open Source travailleront ensemble sur deux initiatives majeures. Varien contribuera à un nombre significatif de fonctionnalités e-commerce natives au sein du Zend Framework, framework PHP standard de l’industrie, partie intégrante de Zend Server. De plus, Zend et Varien optimiseront Magento, Zend Server et Zend Framework afin qu’ils délivrent des performances élevées pour les applications e-commerce.

« Magento est une solution e-commerce robuste qui bénéficie de la souplesse et de la flexibilité de l’Open Source – en fournissant des fonctionnalités e-commerce de qualité, virtuellement, à l’usage de tous » a déclaré Andi Gutmans, CEO et co-fondateur de Zend Technologies. « Grâce à ce nouveau package tout-en-un de Magento et Zend Server, il est dorénavant extrêmement facile pour toutes les sociétés d’installer, configurer et d’explorer toutes les fonctionnalités du commerce en ligne, parmi lesquelles : la gestion de catalogues et de commandes, l’analyse, le SEO, le merchandising, les comptes clients et la livraison, sur plateforme Linux ou Windows. Tout ceci en étant sûr que leur application fonctionnera avec de hautes performances, efficacement et avec fiabilité. Cette combinaison supprime virtuellement toutes les barrières pour développer des sites Web e-commerce de qualité en PHP. »

La plateforme e-commerce Open Source Magento, développée avec PHP 5 et Zend Framework, a déjà été adoptée par des milliers d’utilisateurs et implémentée par des entreprises qui gèrent chaque jour des dizaines de milliers de commandes via de multiples serveurs et clusters de serveurs. L’édition communautaire gratuite de Magento fournit une solution basique et puissante pour les petites sociétés à la recherche d’une plateforme e-commerce performante. Les utilisateurs peuvent upgrader vers Magento Enterprise Edition pour obtenir des fonctionnalités plus avancées ainsi que du support.
Zend Server Community Edition (CE) est un serveur d’applications Web rapide, gratuit et fiable. Que vous pouvez utiliser aussi bien en développement, en test qu’en production. Zend Server CE fonctionne sous Linux, Microsoft Windows et Mac OS X et est tout spécialement configuré pour répondre aux besoins des développeurs, sur leur machine ou pour des déploiements de petits serveurs. Zend Server est également disponible en version commerciale pour faire tourner, superviser et gérer des applications Web en PHP critiques qui nécessitent un haut niveau de fiabilité, de performance et de sécurité.

En utilisant Magento CE et Zend Server CE, les TPE/PME pourront rapidement installer, explorer et commencer à bâtir des boutiques en ligne avec Magento, puis les déployer facilement avec Zend Server. Les utilisateurs peuvent développer des applications Magento eCommerce sur leurs postes de travail sous Windows ou Linux et les déployer en production sur Windows et Linux. Pour étendre plus avant les fonctionnalités e-commerce disponibles pour les développeurs PHP, Varien modularise également Magento et contribue à un nombre significatif de fonctionnalités e-commerce dans le Zend Framework, incluant des interfaces de paiement, des modules de calcul de livraison et bien d’autres choses.

« Les solutions PHP de Zend ont joué un rôle essentiel dans le développement de Magento, nous sommes ravis de contribuer en retour à l’intégration de fonctionnalités e-commerce majeures dans le Zend Framework afin de promouvoir le développement de sites e-commerce basés sur PHP, » a déclaré Roy Rubin, CEO de Varien. « Zend continue à démontrer son expertise inégalée et son fort engagement pour PHP avec des produits tels que Zend Server, et nous pensons étendre plus encore notre partenariat avec eux. En particulier, nous sommes très excités par le fait que le support de Zend Server pour PHP sur Windows soit inégalé, ce qui rend le e-commerce disponible pour toutes les sociétés. »

Wonderbox est un fournisseur de coffrets-cadeaux qui vend d’énormes volumes pendant les fêtes de fin d’année et lors d’autres occasions, telles que la St Valentin et la Fête des Mères. Wonderbox est disponible en France, Italie, Allemagne, Espagne et Pologne et bientôt au Japon, en Belgique, au Portugal et dans bien d’autres pays encore. Les fonctionnalités d’internationalisation de Magento et Zend Framework étaient extrêmement importantes pour leurs plans produit, en plus de la flexibilité Open Source pour laquelle ils sont tous deux réputés.

« Notre site Wonderbox procède à quelque 150 000 transactions par jour et nous estimons que nous servirons plus de 3 millions de visites pendant les fêtes de fin d’années. Nous sommes partis de zéro pour obtenir un site en production totalement fonctionnel qui gère des commandes clients en moins de trois mois en fonctionnant sur Magento eCommerce et Zend Server, » a déclaré Fatih Gezen, Responsable informatique chez Wonderbox. « C’est un ROI impressionnant et une histoire technologique passionnante. En très peu de temps, nous avons maîtrisé la technologie et nous pouvons facilement créer des expériences utilisateurs intuitives que nos clients utilisent pour acheter chez nous. »

« Zend Server “out of the box” vous apporte un environnement PHP sécurisé et de haute performance. Avec l’outil de supervision de Server et les autres fonctionnalités de Magento, c’étaient tout ce dont nous avions besoin pour développer notre site e-commerce, » a commenté Chris Mann, Responsable informatique adjoint chez Wonderbox. « Nous avons bâti un module Magento dans le Zend Framework. Ce qui a été très facile au vu de l’excellent support et formation que nous avons reçu de nos partenaires consultants et la très grande communauté open-source disponible pour ces deux produits. »

En plus des consultants qui se spécialisent en installation Magento/Zend Server, Zend et Varien vont également coopérer sur un programme de formation, training, and d’autres activités pour promouvoir les applications e-commerce, y compris la promotion des bonnes pratiques dans le cycle de vie logiciel et la formation en e-commerce.

Disponibilité
L’environnement Tout-en-un Magento et Zend Server est déjà disponible en téléchargement via les sites Web des deux sociétés, ce qui signifie que les deux immenses communautés de Magento et de Zend auront à leur disposition un seul package pour la solution e-commerce PHP de référence et le plus performant des environnements PHP. Ces packages peuvent être téléchargés via : http://www.magentocommerce.com/product/magento-zend et http://www.zend.com/fr/solutions/packaged-php-applications/zend-server-magento Comme il a été annoncé, les composants eCommerce seront disponibles via le projet Zend Framework et feront également partie du Zend Framework de base embarqué dans chaque téléchargement Magento eCommerce. Cela sera disponible dès que les composants seront ajoutés au projet Zend Framework par les deux équipes.

A propos de Zend Technologies
Zend Technologies Inc., la PHP Company, est le leader des produits et services de développement, déploiement et gestion d’applications Web PHP critiques. PHP est utilisé par 35% des sites Internet dans le monde et est rapidement devenu le langage le plus répandu pour développer des applications stratégiques. Mondialement déployée dans plus de 30 000 entreprises, la gamme de produits Zend apporte une solution complète durant tout le cycle de vie d’une application PHP. Le siège de Zend est situé à Cupertino en Californie.
Pour de plus amples informations, rendez-vous sur http://www.zend.fr ou appelez le 01 48 55 02 00.

A propos de Magento
Magento est une plateforme e-commerce Open Source professionnelle et riche en fonctionnalités qui offre aux commerçants une flexibilité et un contrôle total de la présentation, du contenu et des fonctionnalités de leur canal Web. L’interface d’administration intuitive de Magento fournit de puissants outils marketing, un moteur de gestion de catalogue, et est optimisé pour le SEO afin de permettre aux Web commerçants de créer des sites qui apportent un confort d’achat à leurs clients, et sont taillés selon leurs besoins métiers spécifiques. Conçu pour être totalement scalable et supporté par un réseau important, Magento est la solution eCommerce de référence. Pour de plus amples informations, , rendez-vous sur http://www.MagentoCommerce.com

Contact presse :
Christophe Chervy
+ 33 1 48 55 02 02
christophe@zend.com

Zend, Zend Technologies, Zend Framework, Zend.com, Zend Server, and Zend Studio, and associated logos and icons, are trademarks of Zend Technologies, Inc. and may be registered in certain jurisdictions. All other trademarks are the property of their respective owners.

Proposé par Christophe Chervy

Novembre 2009 – PHP Québec: PHP Québec sera au Career DemoCamp

L'équipe de PHP Québec & ConFoo vous invites aux 'Career & DemoCamp' qui aura lieu Mercredi le 2 Décembre.

Qu'est-ce que Career Demo Camp?

Un Career Demo Camp est une occasion pour les développeurs Web et les start-ups de se rencontrer et d'en apprendre davantage sur le marché du travail et sur certains projets locaux passionnants et réseauter!
La soirée débutera avec l'atelier de carrière a 18:30 h.
1) Alex Kovalenko , un chasseur de têtes pour la firme Kovasys, parlera de recherche d'emploi en technologie
2) Joey DeVilla, un évangéliste développeur de Microsoft Canada, parlera de "bloguer pour vivre" en anglais.
À 20 h, la partie Demo Camp commencera et vous pouvez venir et présenter le code que vous avez fait!

Qu’est ce qu’ un Demo Camp?
un ‘Demo Camp » est une série de 6-8 présentations qui sont comme le «Show Case » pour la communauté de développeur. La démo peut être de votre logiciel, application Web ou projet en action. C'est la seule chose on vous permet de montrer sur le grand écran – aucunes diapositives permises ! L'idée est pour vous de montrer votre technologie en action et de nous inspirez, pas vraiment un argumentaire de vente.

Vous voulez présenter lors du DemoCamp? Faites parvenir un email à Jean-Luc (jeanluc@iweb.com) ou à Yann Larrivée (ylarrivee@phpquebec.org)

Notez que la rencontre du jeudi aura lieu pendant le DemoCamp.

Date : Mercredi, le 2 décembre 2009
Heure : 19:00
Centre Mont-Royal
2200, rue Mansfield Montréal, QC, H3A 3R8
International Room One
map: http://tinyurl.com/yjmet2l

Veuillez confirmer votre présence sur le site web de EventBrite:
http://careerdemocamp.eventbrite.com/

Au plaisir de vous-y voir.

Novembre 2009 – PHP Québec: PHP Québec sera au Career DemoCamp

L'équipe de PHP Québec & ConFoo vous invites aux 'Career & DemoCamp' qui aura lieu Mercredi le 2 Décembre.

Qu'est-ce que Career Demo Camp?

Un Career Demo Camp est une occasion pour les développeurs Web et les start-ups de se rencontrer et d'en apprendre davantage sur le marché du travail et sur certains projets locaux passionnants et réseauter!
La soirée débutera avec l'atelier de carrière a 18:30 h.
1) Alex Kovalenko , un chasseur de têtes pour la firme Kovasys, parlera de recherche d'emploi en technologie
2) Joey DeVilla, un évangéliste développeur de Microsoft Canada, parlera de "bloguer pour vivre" en anglais.
À 20 h, la partie Demo Camp commencera et vous pouvez venir et présenter le code que vous avez fait!

Qu’est ce qu’ un Demo Camp?
un ‘Demo Camp » est une série de 6-8 présentations qui sont comme le «Show Case » pour la communauté de développeur. La démo peut être de votre logiciel, application Web ou projet en action. C'est la seule chose on vous permet de montrer sur le grand écran – aucunes diapositives permises ! L'idée est pour vous de montrer votre technologie en action et de nous inspirez, pas vraiment un argumentaire de vente.

Vous voulez présenter lors du DemoCamp? Faites parvenir un email à Jean-Luc (jeanluc@iweb.com) ou à Yann Larrivée (ylarrivee@phpquebec.org)

Notez que la rencontre du jeudi aura lieu pendant le DemoCamp.

Date : Mercredi, le 2 décembre 2009
Heure : 19:00
Centre Mont-Royal
2200, rue Mansfield Montréal, QC, H3A 3R8
International Room One
map: http://tinyurl.com/yjmet2l

Veuillez confirmer votre présence sur le site web de EventBrite:
http://careerdemocamp.eventbrite.com/

Au plaisir de vous-y voir.

Novembre 2009 – Sbnet: Attention à la faille dans subversion

Enfin, c’est pas vraiment une faille, c’est juste que lorsque l’on déploie un projet à partir d’un dépôt subversion, il faut faire attention aux fichiers et répertoires .svn qui peuvent être visibles, selon  la configuration de votre serveur web. Pour empêcher ça avec apache, quelques lignes dans votre (...)

Novembre 2009 – PHP Index: CrawlProtect

Un nouveau script pour protéger votre site web des attaques de hackers.

CrawlTrack, script de statistiques web qui déjà apportait une protection aux sites l'utilisant est heureux de vous présenter son petit frère CrawlProtect. CrawlProtect est lui uniquement dédié à la protection de votre site. Pas de base MySQL, pas de statistiques sophistiquées, pas de tags à mettre sur vos pages mais une protection très poussée de votre site à l'aide d'un .htaccess extrèmement complet. CrawlProtect vous propose une page de rapport qui vous donne le nombre d'attaques bloquées et les pays d'origine des hackers.

La version 1-1-0 est désormais disponible, vous trouverez plus d'informations et le lien de téléchargement sur www.crawlprotect.com/fr .

Proposé par Jean-Denis Brun

Novembre 2009 – Kamelot Blog: Monitoring de memcache

Je n'ai rien trouvé de mieux que memcache.php like apc.php pour monitorer un peu les serveurs memcache.

Je ne sais pas si quelqu'un a déjà trouvé mieux (je suis preneur).

Ca présente les serveurs disponibles, l'espace alloué, les variables stockées avec leur valeurs ...

Edit : Une liste

Novembre 2009 – Lindev: Faille PHP 5.3.1

Une faille à vite corriger Je ne fais que reporter ce que j'ai pu lire sur d'autres blogs , afin de diffuser le message à ceux qui ne l'auraient pas encore entendu . La faille L'attaque a pour effet de de saturer les serveurs ayant une version de php inférieur à 5.3.1 , et ce via des requêtes (...)

Novembre 2009 – Lindev: Faille PHP 5.3.1

Une faille à vite corriger Je ne fais que reporter ce que j'ai pu lire sur d'autres blogs , afin de diffuser le message à ceux qui ne l'auraient pas encore entendu . La faille L'attaque a pour effet de de saturer les serveurs ayant une version de php inférieur à 5.3.1 , et ce via des requêtes (...)

Novembre 2009 – Prendre un Café: Embedding Relations in Forms with Symfony 1.3 and Doctrine

Symfony 1.3 and 1.4 have been released some days ago in RC2 and you should really take a look at it, because they improve a lot the way you work with the framework, especially the forms one. It’s been a couple of days I started to implement a new bookmarks management feature on a project I’m working on currently, and the new model relationship embedding feature of 1.3’s forms framework just saved me a lot of days.

Here’s a quick and dirty example on how to setup a willingly simplistic bookmarks management system using it

The schema

Here’s the naive Doctrine schema I’ll use for this example:

 yaml
# in config/doctrine/schema.yml
User:
  columns:
    id:
      type: integer(4)
      primary: true
      autoincrement: true
    name:
      type: string(255)
      notnull: true
  relations:
    Bookmarks:
      type: many
      class: Bookmark
      local: id
      foreign: user_id
      onDelete: CASCADE

Bookmark:
  columns:
    id:
      type: integer(4)
      primary: true
      autoincrement: true
    name:
      type: string(255)
      notnull: true
    url:
      type: string(255)
      notnull: true
    user_id:
      type: integer(4)
      notnull: true
  relations:
    User:
      type: one
      local: user_id
      foreign: id

As you can see, it’s really naive. Anyway.

Some fixtures

What would be a Doctrine schema without fixtures? Quite nothing I guess, so here we go:

 yaml
# in data/fixtures/fixtures.yml
User:
  niko:
    name: niko

Bookmark:
  niko_bookmark1:
    User: niko
    name: Slashdot
    url: http://slashdot.org/
  niko_bookmark2:
    User: niko
    name: Delicious
    url: http://delicious.com/
  niko_bookmark3:
    User: niko
    name: Digg
    url: http://digg.com/

Building stuff

You guessed it, after having suited the config/databases.yml file to set up a database of our choice, we can now build the database, all the classes we need and load the previously defined fixtures:

$ ./symfony doctrine:build --all --and-load

A basic user’s bookmarks management form

What we want do do now is to manage one User’s bookmarks in a single form. Let’s do it now in a new UserBookmarksForm.class.php file where we’ll build a form extending the autogenerated UserForm one:

 php
<?php
// lib/form/doctrine/UserBookmarksForm.class.php
class UserBookmarksForm extends UserForm
{
  public function configure()
  {
    // We don't want to edit the User object
    unset($this['name']);

    // Existing bookmark forms
    $this->embedRelation('Bookmarks');
    
    $this->widgetSchema->setNameFormat('user_bookmarks[%s]');
  }
}

All the magic is done by calling the embedRelation() method here: all BookmarkForm instances will be embedded and managed automatically in and by our form.

Let’s use a simple controller to manage the form[1]:

 php
<?php
class testActions extends sfActions
{
  public function executeBookmarks(sfWebRequest $request)
  {
    $this->form = new UserBookmarksForm($user = Doctrine::getTable('User')->findOneByName('niko'));
    if ($request->isMethod('post') && $this->form->bindAndSave($request->getParameter('user_bookmarks')))
    {
      $this->getUser()->setFlash('notice', 'Bookmarks list updated');
      $this->redirect('test/index');
    }
  }
}

And a basic template:

 php
<?php echo $form->renderHiddenFields() ?> <?php echo $form->renderGlobalErrors() ?> <?php echo $form ?>

You should see something like this:

simple.png

The form is functional, you can edit several bookmarks at one. Neat? But wait, we can’t add a new one!

Embedding a bookmark creation form

Let’s enhance our form by embedding an empty BookmarkForm form instance in order to add a new bookmark:

 php
<?php
// lib/form/doctrine/UserBookmarksForm.class.php
class UserBookmarksForm extends UserForm
{
  public function configure()
  {
    unset($this['name']);
    
    // Bookmark creation form
    $newBookmarkForm = new BookmarkForm();
    $newBookmarkForm->setDefault('user_id', $this->object->id);
    $this->embedForm('new', $newBookmarkForm);
    
    // Existing bookmark forms
    $this->embedRelation('Bookmarks');
    
    $this->widgetSchema->setNameFormat('user_bookmarks[%s]');
  }
  
  protected function doBind(array $values)
  {
    if ('' === trim($values['new']['name']) && '' === trim($values['new']['url']))
    {
      unset($values['new'], $this['new']);
    }
    
    parent::doBind($values);
  }
}

Here I just override the doBind() method to remove the bookmark creation embedded form if nothing has been submitted by the user in its fields; that’s probably because he just wants to edit existing bookmarks[2].

By refreshing the page you should now be able to see the new form:

withAdd.png

So now you’re able to add a new Bookmark and/or edit existing instances within the same simple form. Neat? Wait, we can’t delete existing bookmarks!

Deleting existing bookmarks

So you would like to have a checkbox next to every existing bookmark embedded form to schedule its deletion on saving the form? Wow, that’s getting tricky, I like that.

The Symfony forms framework has evolved a lot, but what we’re trying to achieve here will involve some fine-tunning. Don’t be too much afraid seeing the code ;)

First, we’ll have to add the checkbox widget to the BookmarkForm form, but only if an existing Bookmark object has been bound to it:

 php
<?php
// lib/form/doctrine/BookmarkForm.class.php
class BookmarkForm extends BaseBookmarkForm
{
  public function configure()
  {
    $this->widgetSchema['user_id'] = new sfWidgetFormInputHidden();
    $this->validatorSchema['url'] = new sfValidatorAnd(array(
      new sfValidatorString(array('max_length' => 255)),
      new sfValidatorUrl(),
    ));
    
    if ($this->object->exists())
    {
      $this->widgetSchema['delete'] = new sfWidgetFormInputCheckbox();
      $this->validatorSchema['delete'] = new sfValidatorPass();
    }
  }
}

Refreshing the form page should display something like that:

withAddAndDelete.png

The UserBookmarksForm now holds this code:

 php
<?php
// lib/form/doctrine/UserBookmarksForm.class.php
class UserBookmarksForm extends UserForm
{
  /**
   * Bookmarks scheduled for deletion
   * @var array
   */
  protected $scheduledForDeletion = array();  
  
  /**
   * Configures the form
   *
   */
  public function configure()
  {
    unset($this['name']);
    
    // Bookmark creation form
    $newBookmarkForm = new BookmarkForm();
    $newBookmarkForm->setDefault('user_id', $this->object->id);
    $this->embedForm('new', $newBookmarkForm);
    
    // Existing bookmark forms
    $this->embedRelation('Bookmarks');
    
    $this->widgetSchema->setNameFormat('user_bookmarks[%s]');
  }
  
  /**
   * Here we just drop the bookmark embedded creation form if no value has been 
   * provided for it (it somewhat simulates a non-required embedded form)
   *
   * @see sfForm::doBind()
   */
  protected function doBind(array $values)
  {
    if ('' === trim($values['new']['name']) && '' === trim($values['new']['url']))
    {
      unset($values['new'], $this['new']);
    }
    
    if (isset($values['Bookmarks']))
    {
      foreach ($values['Bookmarks'] as $i => $bookmarkValues)
      {
        if (isset($bookmarkValues['delete']) && $bookmarkValues['id'])
        {
          $this->scheduledForDeletion[$i] = $bookmarkValues['id'];
        }
      }
    }
    
    parent::doBind($values);
  }
  
  /**
   * Updates object with provided values, dealing with evantual relation deletion
   *
   * @see sfFormDoctrine::doUpdateObject()
   */
  protected function doUpdateObject($values)
  {
    if (count($this->scheduledForDeletion))
    {
      foreach ($this->scheduledForDeletion as $index => $id)
      {
        unset($values['Bookmarks'][$index]);
        unset($this->object['Bookmarks'][$index]);
        Doctrine::getTable('Bookmark')->findOneById($id)->delete();
      }
    }

    $this->getObject()->fromArray($values);
  }
  
  /**
   * Saves embedded form objects.
   *
   * @param mixed $con   An optional connection object
   * @param array $forms An array of forms
   */
  public function saveEmbeddedForms($con = null, $forms = null)
  {
    if (null === $con)
    {
      $con = $this->getConnection();
    }

    if (null === $forms)
    {
      $forms = $this->embeddedForms;
    }
    
    foreach ($forms as $form)
    {
      if ($form instanceof sfFormObject)
      {
        if (!in_array($form->getObject()->getId(), $this->scheduledForDeletion))
        {
          $form->saveEmbeddedForms($con);
          $form->getObject()->save($con);
        }
      }
      else
      {
        $this->saveEmbeddedForms($con, $form->getEmbeddedForms());
      }
    }
  }
}

The code should be self-explanatory… or not. But anyway, you should now be able to add a new bookmark and delete existing ones as well, in a single form and process, and we’re still using the very same controller from the beginning!

Okay, let’s admit it, we’re reaching the limits of Symfony and probably those of my knowledge of it as well, but… IT WORKS.

But, what about the templating?

As of now we’ve used the convenient <?php echo $form ?> trick, but we now want to have full fine-grained control over the way our embedded form fields will look like.

Let’s update the form template accordingly:

 php
<?php echo $form->renderHiddenFields() ?> <?php echo $form->renderGlobalErrors() ?>
<?php echo __('Create a new bookmark') ?> <?php echo $form['new']->renderError() ?>
<?php echo $form['new']['name']->renderLabel() ?>
<?php echo $form['new']['name']->render() ?> <?php echo $form['new']['name']->renderError() ?>
<?php echo $form['new']['url']->renderLabel() ?>
<?php echo $form['new']['url']->render() ?> <?php echo $form['new']['url']->renderError() ?>
<?php foreach ($form['Bookmarks'] as $i => $eForm): ?>
<?php echo sprintf(__('Edit bookmark #%d'), $i+1) ?> <?php echo $eForm->renderError() ?>
<?php echo $eForm['name']->renderLabel() ?>
<?php echo $eForm['name']->render() ?> <?php echo $eForm['name']->renderError() ?>
<?php echo $eForm['url']->renderLabel() ?>
<?php echo $eForm['url']->render() ?> <?php echo $eForm['url']->renderError() ?>
<?php echo $eForm['delete']->render() ?> <?php echo $eForm['delete']->renderError() ?> <?php echo $eForm['delete']->renderLabel(__('Delete this bookmark')) ?>
<?php endforeach; ?>

Now you can really control the semantics of the HTML code of the form, field by field.

As always, if you have better solutions in mind, feel free to post them in the comments.

Notes

[1] I’ll leave you to create an app, module and route, okay?

[2] Of course this can be a lot improved, but the example is kept as simple as possible to ease understanding.


Ce billet intitulé Embedding Relations in Forms with Symfony 1.3 and Doctrine a été rédigé par Nicolas Perriault et publié sur le blog Prendre un Café sous licence Creative Commons BY-NC-SA.

Novembre 2009 – Lindev: GearMan

GearMan Kesako ? Après l'interview de D.seguy sur phptv , un nom d'extension a particulièrement attiré mon attention , à savoir "Gearman" Je me suis donc renseigné sur la toile et bien entendu le site officiel http://gearman.org. Si j'ai bien compris ( sans entrer dans les détails ) , cette (...)

Novembre 2009 – Hello Design: Magazine Programmez : spécial PHP

Le numéro du magazine Programmez de décembre 2009 vient de paraître. Ce numéro est un numéro spécial PHP, avec de nombreux articles parlant de ce sujet. Vous y découvrirez 2 articles de ma part :

  • Abstraction de base de données (PDO)
  • Captcha : une meilleure sécurité dans vos sites avec le source complet disponible sur mon site internet http://www.hello-design.fr

Bien sur, vous découvrir d'autres sujets traitant de la sécurité et de l'industrialisation PHP.

Novembre 2009 – Lindev: GearMan

GearMan Kesako ? Après l'interview de D.seguy sur phptv , un nom d'extension a particulièrement attiré mon attention , à savoir "Gearman" Je me suis donc renseigné sur la toile et bien entendu le site officiel http://gearman.org. Si j'ai bien compris ( sans entrer dans les détails ) , cette (...)

Novembre 2009 – z-f.fr: Zend Framework 2.0 et Symfony 2.0 en 2010

Forum: Brèves
Auteur: philippe
Écrit le: Mon, 30 Nov 2009 15:41:23 +0100
Dernier message: Mon, 30 Nov 2009 17:44:09 +0100