Bientôt la sortie de Symfony3

Symfony2 a été encore plus utilisé que Symfony première version. Symfony2 a même explosé au sein des agences de développement web. Mais les temps changent, et Symfony3 pointe déjà le bout de son nez.

Selon la roadmap de Fabien Potencier, il n’est pas la peine de se faire du sang d’encre pour prévoir la future migration des sites actuellement en Symfony2 vers Symfony3. OUF ! C’est un véritablement, soulagement. Tu le sais, toi qui as peut être déjà fait une migration vers Symfony2 depuis la première version de Symfony… L’équipe de Fabien Potencier a été très maline, et a réussi à mener au fil des versions mineures les développeurs vers une branche stable, à laquelle il ne faudra rajouter qu’une petite marche pour être compatible Symfony3 !

Chez Wanadev, presque toutes nos réalisations sont réalisées avec Symfony, alors nous suivons avec attention la prochaine version Symfony3. Nous travaillons actuellement, autant que possible, en version 2.7 afin d’être prêts pour le jour J. Et il arrive bientôt, ce jour J… En effet, Symfony3 est prévu en novembre 2015 !

hashtag impatient ;) !

blog-trotting_header
composerjson

Les bundles incontournables pour un nouveau projet Symfony2

composerjsonAvec le temps et l’expérience, au fil des projets Symfony2, on se rend compte que plusieurs Bundles reviennent régulièrement. Je dirai même plus qu’on se demande même comment nous ferions sans certains d’entre eux. Au contraire de ça, des Bundles ne nous semblent plus vraiment utiles, voir même gênants, même s’ils paraissent fabuleux aux premiers essais.

Voici une liste des différents Bundles Symfony2 qui me semblent incontournables.

Continue reading

Utiliser les fonctions de date SQL avec doctrine2 et symfony2

Merci à Florent Viel pour m’avoir refilé le tips (c’est un tueur) !

Grâce à SQL, il est possible de manipuler des dates en utilisant les fonction MONTH(), MINUTE(), etc… plus d’info sur les manipulations de dates en SQL.

Cependant, il est parfois utile de pouvoir les utiliser dans doctrine (par exemple comme dans mon cas en travaillant sur Symfony2 (v2.3 à l’heure où j’écris ce billet)). Avant de pouvoir les utiliser facilement comme dans cet exemple :

$qb = $this->createQueryBuilder('p')
            ->select('count(p) as activity, hour(p.created_at) as hour, dayofweek(p.created_at) as journey')
            ->groupBy('hour, journey');

Il est nécessaire de faire un petit prérequis qui indiquera à doctrine comment utiliser ces fonctions jusqu’à lors inconnues pour lui.

Dans un dossier DQL dans mon bundle (par exemple), créer un fichier Month.php qui renseigne comment parser un format date

<?php

namespace YourApp\YourBundle\DQL;

use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\Parser;
use Doctrine\ORM\Query\SqlWalker;

/**
 * DateFunction ::= "HOUR" "(" ArithmeticPrimary ")"
 */
class Month extends FunctionNode
{
    public $dateExpression;

    public function parse(Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->dateExpression = $parser->ArithmeticPrimary();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

    public function getSql(SqlWalker $sqlWalker)
    {
        return 'MONTH(' .
            $this->dateExpression->dispatch($sqlWalker) .
        ')';
    }
}

Ensuite, dans le fichier de config config.yml de votre application, rajoutez les différentes fonctions que vous souhaitez utiliser :

doctrine:
    orm:
        entity_managers:
                dql:
                    datetime_functions:
                        date: YourApp\YourBundle\DQL\Date
                        hour: YourApp\YourBundle\DQL\Hour
                        month: YourApp\YourBundle\DQL\Month

A partir de là, vous pourrez utiliser vos fonctions de manipulation de dates comme en SQL.

erreur Neither property « path » nor method « getPath() » nor method « isPath() » exists in … lors de l’installation de Symfony 2.1 RC1

Dès les premières minutes de l’installation, il y a une erreur sur la RC1 de la version Symfony 2.1.

Vous obtenez l’erreur :

Neither property « path » nor method « getPath() » nor method « isPath() » exists in class « Sensio\Bundle\DistributionBundle\Configurator\Step\DoctrineStep »

Il suffit d’aller dans :

Symfony/vendor/sensio/distribution-bundle/Sensio/Bundle/DistributionBundle/Configurator/Form/DoctrineStepType.php

et de commenter la ligne :

->add('path', 'text', array('required' => false))

Et tout revient (étrangement) dans l’ordre.