By Olivier Balais
Aujourd’hui chez PMSIpilot, je suis tombé sur le problème suivant : après avoir passé une valeur par défaut à un des widgets de mon formulaire, je ne parvenais pas à la récupérer dans mon action ni dans mon template.
L’appel à la méthode getDefault du sfForm me renvoyait systématiquement null,.
Le code en question :
// Dans le code de mon formulaire :
$this->setWidgets(array(
...
'my_field' => new sfMyWidget(array('default' => 'my_value')),
));
// Dans le code de mon action :
if ($my_form->getDefault('my_field') == 'some_value')
{
...
}
Dans ce cas, la méthode getDefault() appelée sur mon formulaire me renvoie null alors que j’ai explicitement donné une valeur par défaut à mon widget. Pourtant, en lisant la doc de symfony sur le sujet je retiens ceci :
The setDefault(), getDefault(), setDefaults(), and getDefaults() methods manages the default values for the embedded widgets. They are proxy methods for the getDefault() and setDefault() widget methods.
Les méthodes setDefault() et getDefault() au niveau de la classe sfForm sont censées êtres des raccourcis pour les méthodes setDefault() et getDefault() de la classe sfWidgetForm().
En fait il s’avère que ce n’est absolument pas le cas et que la méthode getDefault() du formulaire ne fait jamais appel à la méthode getDefault() du widget associé.
L’appel à $my_form->getDefault(‘my_field’) n’est donc pas équivalent à $my_form['my_field']->getWidget()->getDefault().
Par conséquent, il est important de bien comprendre quelle méthode appeler et dans quel cas.
A savoir, $my_form->getDefault(‘my_field’) quand le setDefault a été utilisé au niveau du formulaire. Exemple :
// Valeurs passées dans mon formulaire :
$this->setWidgets(array(
...
'my_field' => new sfMyWidget(),
));
$this->setDefault('my_field', 'my_value');
// Ou alors valeurs passées dans mon action :
$my_form = new myFormClass(array(
...
'my_field' => 'my_value',
));
Et, $my_form['my_field']->getWidget()->getDefault() quand le setDefault() a été utilisé au niveau du widget. Exemple :
// Dans le code de mon formulaire :
$this->setWidgets(array(
...
'my_field' => new sfMyWidget(array('default' => 'my_value')),
));
Voilà, désormais vous êtes prévenus…
By Sarah Haïm-Lubczanski
Pour coder, nous utilisons majoritairement l’IDE PHPStorm. PHPStorm est vraiment agréable à l’utilisation, et plutôt riche en fonctionnalités, tout en gardant une personnalisation fine. La personnalisation nous permet d’avoir chacun les raccourcis-clavier de notre choix, du coup, quand on souhaite intervenir sur un autre poste de travail, c’est souvent suprenant.
Mais c’est également l’occasion de découvrir et d’échanger sur le logiciel, voilà des astuces pour PHPStorm que j’ai découvertes petit à petit, par hasard ou par transmission directe de la part des collègues.
Connexion avec SCM (Git)
PHPStorm implémente les fonctions du SCM dans des menus contextuels, mais parmi mes collègues, je crois que nous utilisons majoritairement la ligne de commande pour interagir avec Git.
Rollback dans la marge

Les marges affichent les modifications faites sur le fichiers par une barre de couleur dans la marge, et en cliquant sur la barre, il est proposé de faire un rollback de nos modifs. Pratique pour supprimer les lignes vides ajoutées en plus (et éviter des modifications sur un fichier qui n’a pas été réellement amélioré au final).
Je soupçonne le Colonel Moutarde avec une Regex dans la lib

Un clic-droit dans la marge du fichier propose “Annotate”, cela revient à utiliser le Blame de Git. On a donc un affichage sur le dernier commit (hash et auteur) pour chaque ligne du fichier.
Configuration du panneau TODO

Tout comme Eclipse, PHPStorm propose des panneaux pour les différentes fonctionnalités. Un des ces panneaux (numéro 6) se nomme TODO. Par défaut, il présente une liste de fichiers indexés parce qu’ils ont un TODO dans leur contenu.
Le plus ?
On peut configurer des filtres, pour indexer n’importe quel autre contenu.
Par exemple, on peut imaginer indexer le mot-clef DEBUG, et laisser dans notre code des DEBUG pour signifier qu’il faudra repasser à cet endroit avant publication des fichiers, pour ôter le code spécial Debug Mode.
Le petit défaut est que le panneau garde son nom de TODO, quelle que soit la configuration.
Rechercher dans vos fichiers modifiés

Un choix de scope de recherche intéressant se trouve dans la boîte de dialogue de recherche : “Changed Files” au sens Git du terme. Cela permet de chercher dans les fichiers modifiés et pas encore commités.
Quel intérêt ?
La recherche sur tout le projet s’avère assez longue, pour nous qui avons une énorme base de code.
Find Usage…

En menu contextuel sur le nom d’une méthode ou d’une fonction, on peut lancer une recherche “Find Usage…” et PHPStorm recherche tous les fichiers contenant cette méthode.
La liste des éléments est filtrée sur : usage en lecture, appel de la méthode, nommage uniquement (en commentaire par exemple).
Bémol : cela fonctionne parfaitement pour des méthodes nommées et moins pour tout ce qui est système de Factory (construction selon le nom des méthodes/objets).
Zoom à la molette
Comme dans beaucoup de logiciels, cette manipulation agrandit la police du texte (zoom).

Le petit plus de PHPStorm : chaque onglet est indépendant dans son zoom. Encore plus fort : quand on splitte notre fenêtre de travail en deux, on peut zoomer sur un fichier dans une partie du splitte sans impact sur l’autre partie (oui, sur le même fichier).
Utiliser ses deux écrans
Quand on saisit un onglet et qu’on le glisse-déplace hors de la fenêtre applicative de PHPStorm, l’onglet se met dans une fenêtre autonome, et on peut lui ajouter d’autres onglets. Ensuite, on peut replacer les onglets dans la fenêtre principale.
C’est plutôt intéressant pour avoir un fichier sur un second écran, sans avoir à splitter la vue.
Toute la ligne
Et une astuce tellement simple qu’on se demande pourquoi ne pas y avoir pensé avant : quand on fait un Ctrl+C sans sélection, la ligne sur laquelle on se trouve est copiée (fonctionne avec couper aussi). Pas besoin de sélectionner la ligne auparavant.
Et vos astuces ?
Ces astuces sont celles que j’ai notées au cours du dernier mois, et qui pourront vous servir. Evidemment, cet article est loin d’être exhaustif, alors n’hésitez pas à l’enrichir.