Newsletter Apprendre Laravel #2

Envoyée le 13 janvier 2019

Bienvenue dans la 2e newsletter d'Apprendre Laravel !

Tout d'abord, merci à toutes les personnes qui m'ont fait des retours sur la première newsletter, n'hésitez pas à continuer. La newsletter semblait un peu (trop) sobre pour certains, je ne compte pas mettre d'images ou autre par la suite, mais j'aimerais faire une version web de la newsletter pour les suivantes et aussi pour que les nouveaux inscrits puissent voir les infos précédentes (en attendant, n'hésitez pas à me demander la 1re en réponse à ce mail si vous l'avez manqué).

Bibliothèque

Aujourd'hui, je présente à nouveau une bibliothèque de Spatie qui vient de passer la barre symbolique des 100 000 téléchargements :

Laravel Query Builder https://github.com/spatie/laravel-query-builder

Cette bibliothèque permet d'automatiser les filtres, les inclusions de relations Eloquent et les tris. Dans le code PHP, il est uniquement nécessaire de spécifier les colonnes (pour les filtres et les tris) et les relations Eloquent autorisées, et ensuite, le front-end peut directement faire toutes les combinaisons de requêtes : "/users?filter[name]=John", "/users?include=posts,permissions", "/users?sort=name"… Le code PHP pour l'ajout de toutes ces fonctionnalités est très minimaliste, la bibliothèque se charge de récupérer les valeurs depuis la requête HTTP et de convertir ces valeurs en requêtes SQL Eloquent.

$users = QueryBuilder::for(User::class)
    ->allowedFilters('name', 'email')
    ->allowedSorts('name')
    ->allowedIncludes('posts', 'permissions')
    ->get();

Je vous encourage à regarder les exemples sur Github pour vous faire votre idée !

https://twitter.com/freekmurze/status/1083777681957810176

Mise à jour

Taylor Otwell a parlé de la version 5.8 sur Twitter.

Updated a project I’m working on from Laravel 5.7 to 5.8. Didn’t change any code. Tests pass.

https://twitter.com/taylorotwell/status/1083477222017716227

A priori, les changements seront réduits, et vous devriez pouvoir mettre à jour la plupart de vos applications sans toucher à votre code.

Laravel 5.8 isn’t out yet btw. 😅 5.8 releases in February…

https://twitter.com/taylorotwell/status/1083477848206295040

La version sortira en février comme prévu. Taylor Otwell a également montré l'évolution de la page "Upgrade Guide" qui sera plus simple à appréhender avec des sections pour les changements très importants, moyennement importants et les autres changements qui ne devraient rien changer pour vous.

https://twitter.com/taylorotwell/status/1083722722100867072

Annonce

Les tickets pour la Laracon Online sont disponibles. La Laracon Online, c'est une conférence entièrement en ligne à petit prix ($12). Les principaux acteurs de l'éco-système Laravel donneront des conférences.

Vous pouvez vous inscrire sur le site de la Laracon Online https://laracon.net/. Si vous n'avez pas les moyens de payer ($12), plusieurs centaines de places seront offertes sur inscription (mais ne vous inscrivez pas si vous pouvez vous permettre de payer $12).

La date est le 6 mars 2019, à partir de 16 h pour nous en France. J'organiserai sans doute un live ou un rassemblement sur le Discord pour échanger sur les conférences pendant et après ! Dites moi ce que vous en pensez.

Une citation de @michel sur le Discord

Bonsoir les amis, je me rends compte qu'on veut souvent aller vite, mais on oublie les bases : si on ne comprend pas PHP, on ne peut pas s'en sortir sur Laravel, Symfony… Et si on ne comprend pas JavaScript, on ne va pas s'en sortir avec VueJS, React, Angular…

Je suis totalement d'accord avec ce qui est dit. Mes vidéos et mes tutoriels présentent Laravel sans expliquer PHP parce que je considère que d'autres ressources existent sur Internet et non pas parce qu'il ne faut pas apprendre PHP avant Laravel.

Un tweet que j'ai vu passer cette semaine également va dans ce sens :

Opinion non-consensuelle : j'ai l’impression que l’enseignement supérieur informatique va dans le mur. On réduit beaucoup l’apprentissage à de l’expertise technique d’outils modernes sans les bases théoriques ou compréhension générique […]

https://twitter.com/edasfr/status/1084023741452115968

Les bases théoriques sont très importantes et à ne pas négliger. Connaître un outil, c'est bien, c'est pratique, ça permet de gagner un peu d'argent sur le court terme, mais les outils évoluent et les changent. Si vous ne vous formez pas à la théorie (langages, algorithmique…), au rythme de l'évolution actuelle de l'informatique, vous risquez de vous trouver très rapidement à connaître uniquement un outil obsolète.

Morceau de code

Sur le Discord ainsi que sur Twitter https://twitter.com/Souvir/status/1083286431450177536), j'ai vu beaucoup de personnes discuter de la coloration des parenthèses, accolades… Via des extensions pour VS Code, Atom, Sublime Text…

Ces extensions ne sont pas problématique, mais si vous ne vous y retrouvez pas avec vos fermetures d'accolades, c'est sans doute qu'il y a un autre problème dans votre code. Par exemple :

function getAdmin()
{
    $user = auth()->user();

    if (! is_null($user)) {
        if ($user->isAdmin()) {
            return $user;
        } else {
            return null;
        }
    } else {
        return null;
    }
}

Il peut être simplifié via un concept appelé "Early Return" afin de réduire l'indentation, de else et d'accolades imbriquées :

function getAdmin()
{
    $user = auth()->user();

    if (is_null($user)) {
        return null;
    }

    // $user est forcément non null ici.
    if (! $user->isAdmin()) {
        return null;
    }

    // $user est forcément un admin ici.
    return $user;
}

L'idée de ce concept est de gérer les cas particuliers dès le début de la fonction et d'utiliser le mot-clé return qui permet de sortir de la fonction sans exécuter la suite. Il faut faire attention à ne pas oublier de return afin de ne pas avoir de problèmes.

Question de la semaine

Sur le Discord, @Jo avait un problème avec la valeur de la colonne updated_at qui n'était pas mise à jour lors d'un $model->update(). La réponse à cette question est simple, si les attributs du modèle ne changent pas, la fonction update() ne va pas mettre à jour la colonne updated_at. Juste après, @melo241 se demandait si Laravel exécutait la requête SQL. Après vérification, non. Si les attributs n'ont pas changé, Laravel ne va pas exécuter de requête SQL.

$user = User::first();
$user->update([
    'email' => 'thibaud@formation-laravel.fr'
]); // 1 requête SQL (changement de `updated_at`)
$user->update([
    'email' => 'thibaud@formation-laravel.fr'
]); // 0 requête SQL (pas de changement de `updated_at`)

Apprendre Laravel

Je n'ai pas eu beaucoup de temps pour avancer sur les tutoriels cette semaine. J'ai simplement ajouté les liens vers la série "VueJS & API Laravel" sur la page d'accueil et j'ai repris les premiers articles du LaraGuide pour les améliorer, corriger les fautes et les mettre à jour pour Laravel 5.7.

Comme toujours, vous pouvez répondre à ce mail pour me faire vos retours, poser vos questions ou me demander de vous retirer de la liste.

Bonne fin de week-end à tous,

Thibaud