Blog d'un passionné du web (Symfony, Wordpress, HTML5, Sass, Gulp…)

Mon site freelance Développeur Symfony
Mon Facebook - Mon Twitter

Les bundles Symfony 3 indispensables en 2018

2018 marque le début de l’utilisation de Symfony 3 sur une version LTS et bonne nouvelle bootstrap 4 devrait également arriver à maturité ! Mais ce n’est pas le sujet du jour, voici un petit article qui permet de  présenter les bundles à mon sens indispensable à tous projet Symfony 3 en 2018. Les bundles sont un atout majeur de Symfony car ils permettent de gagner du temps et de l’efficacité en développement. Au fil des ans j’ai l’impression que le nombre de bundles diminue et beaucoup ne sont pas maintenus, mais certains restent des valeurs sûres.

Les bundles Symfony 3

StofDoctrineExtensionsBundle

La plupart des projets utilisent Doctrine. Si il y a bien un bundle qui rend service c’est StofDoctrineExtension. Fini la gestion approximative des dates de mise à jour, création d’entités ! Avec l’extension Doctrine les champs createdAt et updatedAt sont gérés automatiquement (je vous laisse lire la doc). Une autre fonction bien utile est le deletedAt, par sécurité plutôt que d’effacer une entité (fausse manipulation d’un client par exemple) l’extension marque l’entité comme supprimée et ce de marnière transparente pour le développeur qui n’a qu’à faire comme si il avait effacé l’entité.

TwigExtension

Je vous l’accorde ce n’est pas un bundle. Cependant l’extension Intl rend bien des services notamment pour afficher des dates à l’utilisateur (Jeudi 9 novembre 2017 au lieu de 09/11/2017 par exemple).

FOSUserBundle

La quasi totalité des projets ont besoin d’une gestion utilisateurs. La version 2 du FOSUser a eu bien du mal à évoluer vers une version stable mais c’est enfin le cas. Je sais que certains développeurs ne veulent pas utiliser ce bundle et préfère utiliser la façon ‘standard’. De mon point de vue ce bundle fais gagner du temps notamment d’un projet à un autre. Il permet  également l’utilisation d’autres bundles qui ont été pensé pour utiliser FOSUser.

Petite astuce sur FOSUserBundle pour

  1. Ne pas utiliser le username et le remplacer par le mail
  2. Permettre de recharger les droits automatiquement lors d’un ajout/retrait de rôle, en effet cela évite de demander à l’utilisateur de se reconnecter!

//In Entity/User.php
class User extends BaseUser implements EquatableInterface {
.....
    /**
     * Permet de re-authentifier l'utilisateur en cas de changement sur le user
     * @param UserInterface $user
     * @return bool
     */
    public function isEqualTo(UserInterface $user) {
        if ($user instanceof User) {
            // Check that the roles are the same, in any order
            $isEqual = count($this->getRoles()) == count($user->getRoles());
            if ($isEqual) {
                foreach($this->getRoles() as $role) {
                    $isEqual = $isEqual && in_array($role, $user->getRoles());
                }
            }
            return $isEqual;
        }
        return false;
    }

    //set username as email
    public function setEmail($email)
    {
        $email = is_null($email) ? '' : $email;
        parent::setEmail($email);
        $this->setUsername($email);

        return $this;
    }

Les autres bundles

Il y a des bundles que j’utilise régulièrement dans les projets mais répondent à des besoins spécifiques au projet comme :

  • la genération des PDFs (knpSnappyBundle + h4cc/wkhtmltopdf-amd64)
  • Ckeditor (egeloen/ckeditor-bundle)
  • Gestion des fichiers (helios-ag/fm-elfinder-bundle)

En dehors de ces bundles un projet Symfony devrait également toujours contenir une gestion des assets avec gulp ou grunt selon les préférences.  À ce sujet, je vous invite à lire mon article sur l’utilisation de Gulp et Symfony

Si vous avez des bundles que vous jugez indispensables n’hésitez pas à les partager dans les commentaires et je les rajouterai dans l’article.

9 novembre 2017


Previous Post

Next Post