mardi 12 avril 2016

Nouveautés dans Symfony 3.0 (novembre 2015)

Symfony 3.0 n'a aucune nouvelle fonctionnalité, comparé à la version 2.8.

Tout l'intérêt de cette version est de supprimer toutes les E_USER_DEPRECATED levées par Symfony au fil des versions.
Je n'ai pas retrouvé la source, mais de mémoire, sur le site de Symfony, ils disaient avoir supprimé 15% de lignes de code (quelques milliers quand même), pour arriver à ce résultat.
Comment passer de la 2.x à la 3.0

Pour vous aider à trouver les E_USER_DEPRECATED dans votre code, les corriger, et pouvoir passer à Symfony 3.0 :
symfony/phpunit-bridge
deprecation-detector
umpirsky/Symfony-Upgrade-Fixer

mardi 5 avril 2016

Créer un identifiant d'entité Doctrine

Doctrine 2.5 (et sûrement les versions antérieures) permet de mapper un champ d'une entité, en le définissant comme étant son identifiant.

La documentation parait complète, mais il y a quelques erreurs, et des informations de mapping qui ne sont pas reportées sur cette page.
Voici toutes les options possibles pour le mapping d'un identifiant, au format YML :
Foo\Entity\Bar: id: id: type: integer generator: strategy: NONE options: unsigned: false column: id associationKey: my_field length: 50 columnDefinition: INT AUTO_INCREMENT UNSIGNED sequenceGenerator: sequenceName: message_seq allocationSize: 100 initialValue: 1 customIdGenerator: Foo\CustomIfGenerator tableGenerator: Foo\TableGenerator
  • type : type du champ. Je n'ai pas testé tous les types de champs, certains peuvent ne pas fonctionner comme datetime. Liste des types de champs.
  • generator [défaut : NONE] : même si la documentation dit que la valeur par défaut est AUTO, c'est bien NONE la vraie valeur par défaut (cf ClassMetadataInfo, valeur par défaut de $generatorType). Donc par défaut, aucune gestion automatique de l'identifiant n'est effectuée, c'est à vous de faire setId() "avant le persist()". La valeur AUTO est la bonne pour la majorité des cas.
  • options : tableau d'options, chaque type de champ peut avoir ses options. Par exemple pour les types numériques, on peut spécifier unsigned.
  • column [défaut : id] : nom de la colonne dans la base de données.
  • associationKey : Voir la documentation.
  • length [défaut : 255] : utilisé pour les types string et binary, pour indiquer la longueur maximale de la valeur stockée en base.
  • columnDefinition : pour surcharger le code SQL généré dans le CREATE TABLE et ALTER TABLE.
  • sequenceGenerator : configuration de la séquence, utilisée uniquement pour Oracle et Postgres.
  • customIdGenerator : si aucune stratégie de génération d'identifiant ne vous convient, vous pouvez créer une classe qui doit étendre de Doctrine\ORM\Id\AbstractIdGenerator, et indiquer son fully qualified class name ici.
  • tableGenerator : petite blague de Doctrine, même si c'est écrit dans la documentation : la configuration existe, mais elle n'est pas gérée, et lève une MappingException.
Toutes ces informations proviennent de YamlDriver, de la version 2.5 de Doctrine, utilisée dans Symfony 2.8.

Pour résumer, voici la bonne configuration d'un mapping d'identifiant, pour la plupart des cas :

Foo\Entity\Bar: id: id: type: integer # de -2 147 483 648 à 2 147 483 647 en MySQL generator: strategy: AUTO # IDENTITY pour MySQL, SQLite, MsSQL et SQL Anywhere, SEQUENCE pour Oracle et PostgreSQL options: unsigned: true # pas d'identifiants négatifs, change le maximum à 4 294 967 295

jeudi 26 novembre 2015

Symfony 2.7.7 disponible

Symfony 2.7.7 est disponible, avec 23 bugs corrigés, dont 2 failles de sécurité :
  • CVE-2015-8124 : connexion avec un utilisateur, en utilisant son identifiant de session, stocké sans le cookie "Remember me"
  • CVE-2015-8125 : remote timing attacke, en utilisant également le cookie du "Remember me"
Les 2 failles ci-dessus ont également été corrigées dans Symfony 2.3.35 et 2.6.12, mais pas dans les versions 2.4 et 2.5 (qui ne sont plus maintenues).

Changelog Symfony 2.7.7

steevanb/gitscripts 2.4.0 disponible

steevanb/gitscripts 2.4.0 est disponible, avec l'ajout du paramètre --force pour le script deluntrackedbranch.sh.

Avant la 2.4.0, par défaut, deluntrackedbranch.sh effectuait réellement la suppression des branches non traquées par origin.
Maintenant, pour effectuer la suppression, il faut ajouter le paramètre --force.
Sans ce paramètre, la liste des branches non traquées sera affichées, sans suppression effectuée.

Changelog 2.4.0

lundi 21 septembre 2015

steevanb/gitscripts 2.3.0 disponible

steevanb/gitscripts 2.3.0 est disponible, avec l'ajout du script deluntrackedbranch.sh.

Ce script liste les branches du remote origin, les compare avec les branches locales, et supprime les branches locales qui n'existent pas sur origin.
C'est assez utile quand on a avancé dans un projet, et qu'on a beaucoup de branches en locale qui ont été mergées via un outil quelconque (GitLab, GitHub, etc) et qui n'existent plus.

Changelog steevanb/gitscripts

steevanb/sf2-form-utils 1.3.1 disponible

steevanb/sf2-form-utils 1.3.1 est disponible.
Pour rappel, cette librairie permet à la méthode FormType::buildForm() d'être orientée objet, donc de profiter de l'auto-complétion et de rapidement savoir les configurations disponibles pour chaque type de champ.

  • Les setters avec un paramètre de type bool ont une valeur par défaut à true (par exemple, setCascadeValidation(true) peut être directement appelé setCascadeValidation()).
  • La méthode getFieldEntity()->setRepositoryMethod() permet de facilement appeler une méthode de repository, sans avoir à écrire la closure.
  • Les méthodes setAutofocus() et getAutofocus() ont été ajoutées aux types de champs correspondants, ainsi que setPlaceholder() et getPlaceholder().

Changelog steevanb/sf2-form-utils 1.3.1

Symfony 2.7.4 disponible

Symfony 2.7.4 est disponible, avec 40 bugs corrigés, notamment pour la compatibilité PHP 7.

Un gros travail a été effectué pour la compatibilité avec Twig 2.0, ce qui rend Symfony 2.7.4 entièrement compatible avec Twig 1.x et 2.x.

Si vous êtes sur la branche 2.7 de Symfony, vous êtes encouragés à passer à cette version.

Changelog Symfony 2.7.4

lundi 3 août 2015

steevanb/sf2-form-utils 1.1.0 disponible

steevanb/sf2-form-utils est disponible en version 1.1.0.
Cette librairie, utilisée dans un projet Symfony2, permet à la méthode FormType::buildForm() d'être orientée objet, au lieu d'utiliser un tableau dont on connait pas forcément les clefs / valeurs possibles.

class FooType extends AbstractType { use Fields; public function buildForm(FormBuilderInterface $builder, array $options) { // appel obligatoire pour sauvegarder $builder, // utilisés par les méthodes Fields::getFieldXXX $this->setBuilder($builder); // maintenant, vous pouvez appeler les méthodes $this->getFieldXXX(), // en finissant toujours par un appel à add() // tous les paramètres des méthodes getFieldXXX() sont différents, // pour demander les paramètres requis et les plus utilisés $this->getFieldText('name', 'Name')->add(); // un autre exemple avec diverses configurations $this ->getFieldEmail('email', 'E-mail') ->setRequired(false) ->setEmptyData('default@mail.com') ->setTrim(false) ->add() ; } }
steevanb/sf2-form-utils sur github

Symfony 2.7.3 disponible

Symfony 2.7.3 est disponible, avec 18 bugs corrigés, notamment pour la compatibilité PHP 7 et HHVM 3.3.

Si vous êtes sur la branche 2.7 de Symfony, vous êtes encouragés à passer à cette version.

Changelog Symfony 2.7.3

mercredi 10 juin 2015

php-cs-fixer intégré dans PHPStorm

php-cs-fixer, l'outil de réécriture de code PHP pour respecter des normes de dev, est sorti en version 1.0 en novembre 2014.
Il permet de réécrire du code selon certaines configurations, par exemple short_tag qui ne permet pas l'utilisation des short tags (), eof_ending qui ajoute une ligne vide en fin de fichier, etc.

Installation
wget http://get.sensiolabs.org/php-cs-fixer.phar -O php-cs-fixer chmod a+x php-cs-fixer sudo mv php-cs-fixer /usr/local/bin/php-cs-fixer

Intégration dans PHPStorm

php-cs-fixer peut être automatiquement appelé, à chaque sauvegarde d'un fichier PHP, dans PHPStorm.
Il faut aller dans Files / Settings / Tools / File Watchers, cliquer sur le + vert en haut à droite, choisir <custom>.
Dans File type : choisir PHP files.
Dans Program : indiquer le lien vers php-cs-fixer (/usr/local/bin/php-cs-fixer dans notre exemple).
Dans Arguments : fix $FilePath$ --level=symfony

Personnellement, je change quelques directives de réécriture, ce qui me done pour Arguments : fix $FilePath$ --level=symfony --fixers=concat_with_spaces,-multiline_array_trailing_comma,-phpdoc_params,-align_equals.

php-cs-fixer documentation