Commentaires

L'installation


Nous allons donc attaquer notre blog en commençant par installer Laravel.

Arthur, l'apprenti développeurIl faut que j'aie composer ?
En effet, comme indiqué dans la doc de Laravel (Laravel Doc), nous installerons les dépendances de Laravel via composer. Normalement si tu attaques ce cours c'est que tu connais un peu composer. Pour te rafraîchir la mémoire, composer est un gestionnaire de dépendances PHP (équivalent de npm pour Javascript). Il gère aussi pour nous l'autoloader. Un petit lien vers la documentation si jamais : Documentation de composer.

Arthur, l'apprenti développeurJe vais faire un tour par là, ça ne me fera pas de mal !
Entendu. Une fois que c'est bon pour toi, on va pouvoir attaquer l'installation de Laravel.
Plusieurs solutions s'offrent à nous :
- Télécharger Laravel Installer via composer et effectuer ensuite toutes les opérations via cet installateur
- Utiliser composer comme habituellement
- Utiliser une image Docker fournie par Laravel

Je te propose d'installer Laravel via composer comme il est habituel de le faire. Les autres solutions sont intéressantes (notamment l'image Docker toute prête), mais il faut quelques notions avec Docker au préalable. Ce n'est pas forcément le cas de tout le monde. Restons donc dans le classique !


Premièrement, nous installons Laravel. La ligne suivante va créer un dossier nommé "blog" (que tu peux renommer comme bon te semble) dans ton dossier courant.


{"language":"shell","content":"composer create-project laravel/laravel blog-v9","filename":"CONSOLE"}


Il y a également des outils plus avancés proposés par le framework qui permettent de gérer le serveur local sur lequel tu exécutes ton application comme Homestead ou Vagrant. Nous en parlerons dans un futur tutoriel au besoin.

Arthur, l'apprenti développeurTrès bien j'ai tout compris. Je fais quoi maintenant ?
Nous allons maintenant regarder un peu la structure des dossiers de Laravel pour nous familiariser avec tout ça. Rendez-vous dans le dossier récemment créé :

{"language":"","content":"cd blog","filename":"CONSOLE"}

Découverte de l'architecture



Nous pouvons voir 11 dossiers (certains devraient ne pas être si inconnus que ça vu tu as déjà vu le modèle MVC et composer) et plusieurs fichiers notamment liés à la configuration. Décryptons tout ça :

  1. app : ce dossier contient clairement le coeur de notre application. Nous y écrirons nos contrôleurs, nos modèles... Tout ce qui concerne les lettres M et C du modèle MVC

  2. bootstrap : nous ne toucherons pas à ce dossier. Il est utilisé par Laravel pour initialiser l'application et optimiser les performances

  3. config : le nom est assez explicite. Nous retrouvons ici tous les fichiers de configuration sur lesquels nous pouvons agir pour paramétrer notre site

  4. database : ici nous aurons les fichiers qui agiront sur la création des tables en base de données

  5. lang: ici nous aurons les fichiers qui permettent de faire "l'internationalisation", c'est-à-dire que c'est dans ce fichier qu'on aura les traductions entre les différentes langues que nous voulons proposer sur notre site.

  6. public : c'est ici le point d'entrée de notre site web. Le fichier index.php est ici et nos assets (images, css, js...) seront dans ce dossier là. C'est normalement le seul dossier accessible pour les internautes

  7. resources : ici, c'est le dossier du V du modèle MVC. Nos vues et notre JS/CSS avant minification/bundlisation... sont ici ;)

  8. routes : assez explicite, ici a les fichiers dans lesquelles on indique nos routes

  9. storage : quand on donne aux utilisateurs la possibilité de mettre des fichiers sur notre site (upload d'image par exemple), ceux-ci seront stockés dans ce fichier. Il y a donc des droits particuliers dessus

  10. tests : un dossier pour les tests unitaires

  11. vendor : le fameux vendor géré par composer qu'on ne doit pas toucher et qui est dans le gitignore


Arthur, l'apprenti développeurEt concernant les fichiers à la racine ?
Tu parles sûrement des .env, composer.json, webpack.mix.js et autres... Ces fichiers sont pour la plupart liés à la configuration. Tu dois sûrement en connaitre : les fichiers liés à composer, ceux liés à npm (package.json), ceux liés à git.
Clairement ce qui va nous intéresser ici :
.env : c'est LE fichier de configuration qu'on ne peut éviter. On renseignera les identifiants de base de données, les clés API si on en a, le nom de l'application qu'on développe...
webpack.mix.js : typique de Laravel, ce fichier servira à paramétrer notre bundler/minifier et à agir sur nos fichiers javascript ou CSS durant l'étape de "compilation".

Parfait, commençons donc par toucher au .env pour configurer les accès à notre base de données.

Configuration


D'abord, je te laisse créer une base de données relationnelle dans MariaDB ou MySQL par exemple. Je rappelle que MariaDB est un fork de MySQL, donc dans tous les cas le type de connexion pour Laravel sera "mysql".

Ensuite, ouvre ton fichier .env dans ton éditeur favori et modifie les lignes suivantes par les valeurs liées à ta base de données :

{"language":"application/x-httpd-php","content":"DB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=laravel\nDB_USERNAME=root\nDB_PASSWORD=","filename":".env"}

Tu peux aussi en profiter pour changer les lignes suivantes avec les valeurs que tu voudras. Par exemple :

{"language":"application/x-httpd-php","content":"APP_NAME=Blog\nAPP_ENV=local\nAPP_DEBUG=true\nAPP_URL=http://localhost:8888/blog/public","filename":".env"}

Arthur, l'apprenti développeurJe n'ai pas trop compris à quoi servaient ces lignes... Peux-tu me réexpliquer ?
Pas de soucis.
La variable APP_NAME est simplement le nom donné à l'application. Il sert si l'on garde les templates de base de Laravel dans les vues, notamment dans la balise title.
La variable APP_ENV peut prendre la valeur local ou production selon si l'on est en train d'utiliser le site en local ou bien en ligne.
APP_DEBUG quant à elle indique si l'on veut afficher les informations de débug sur les pages. Attention, activer cette option peut être très compromettante pour un site en ligne car les informations de connexion à la BDD sont inscrites en clair par exemple
APP_URL c'est l'URL qui permet d'accéder à l'application. Si l'on utilise MAMP, ce sera localhost:port/blog/public/. Si on utilise le serveur de Laravel (on voit ça juste après !), ce sera http://127.0.0.1:8000

Arthur, l'apprenti développeurOk c'est plus clair ! J'ai créé une base de données et j'ai aussi configuré mon .env. Que dois-je faire maintenant ?
Maintenant, on va continué la configuration, mais rien de bien complexe ne t'inquiète pas.
On va aller dans le dossier config puis dans le fichier app.php.


Tu peux remarquer ce genre de lignes :

{"language":"application/x-httpd-php","content":"'name' => env('APP_NAME', 'Laravel'),","filename":"app.php"}

En fait, c'est ici qu'on dit : notre variable de configuration appelée "name" a pour valeur ce qu'on a renseigné dans APP_NAME dans notre .env. Si on ne l'a pas renseignée dans notre .env, alors on prendra la valeur par défaut qui est ici Laravel.
Cette manière de faire permettra dans toute ton application d'accéder aux variables de configuration de manière simple.

N'hésite pas à lire les commentaires associés à chaque lignes de configuration, ils sont très explicites.

Nous allons maintenant modifier ce fichier pour renseigner la langue du site (très utile pour que les parties en Anglais de Laravel soient automatiquement en Français !) et le fuseau horaire.
Modifions donc les variables "timezone", "locale" et "fallback_locale" comme suit :

{"language":"application/x-httpd-php","content":"/*\n |--------------------------------------------------------------------------\n | Application Timezone\n |--------------------------------------------------------------------------\n |\n | Here you may specify the default timezone for your application, which\n | will be used by the PHP date and date-time functions. We have gone\n | ahead and set this to a sensible default for you out of the box.\n |\n */\n\n 'timezone' => 'Europe/Paris',\n\n /*\n |--------------------------------------------------------------------------\n | Application Locale Configuration\n |--------------------------------------------------------------------------\n |\n | The application locale determines the default locale that will be used\n | by the translation service provider. You are free to set this value\n | to any of the locales which will be supported by the application.\n |\n */\n\n 'locale' => 'fr',\n\n /*\n |--------------------------------------------------------------------------\n | Application Fallback Locale\n |--------------------------------------------------------------------------\n |\n | The fallback locale determines the locale to use when the current one\n | is not available. You may change the value to correspond to any of\n | the language folders that are provided through your application.\n |\n */\n\n 'fallback_locale' => 'fr',","filename":"app.php"}


Ok parfait ! Maintenant, passons à l'exécution et voyons la page d'accueil de notre site web.
Pour ça, comme je l'ai dit, 2 solutions : si tu as MAMP, WAMP ou autre, rdv sur Localhost comme habituellement. Sinon, on peut lancer :

{"language":"shell","content":"php artisan serve","filename":"console"}



Et voilà, si tout marche bien, tu as ceci qui doit s'afficher (version 8 de Laravel) !


Arthur, l'apprenti développeurMais attends, on vient de régler dans le fichier de configuration app.php la langue en Français... Tout est en Anglais. Tu serais pas en train de nous raconter des salades ?
En effet, la page d'accueil est en Anglais... Et malheureusement, on ne pourra pas y faire grand chose à moins de traduire à la main ce qui est indiqué. Cela est normal. En effet, cette page ne restera jamais sur le site web telle quelle : on modifiera notre index en fonction de ce qu'on veut afficher pour les internautes.
Par contre, si on inspecte la page d'accueil, on remarque quand même que notre modification de langue a fonctionné.
Tu peux aussi essayer de remettre à zéro tes configurations et on aura <html lang="en"> qui s'affichera.
Cependant, même si on a renseigné la langue à "fr", il faut télécharger les fichiers qui permettent de traduire les phrases de base de Laravel en Français. Pour ça, on va installer le dossier de langues "fr" qu'on va piocher de ce repo GitHub (auquel j'ai participé (oui je frime un peu)) :
https://github.com/Laravel-Lang/lang
On fait donc un :

{"language":"shell","content":"composer require laravel-lang/lang --dev","filename":""}

Puis on a juste à déplacer le dossier de langues "fr" de vendor à resources/lang/fr et de même avec le fichier fr.json qu'on mettra dans resources/lang.
Pour ça on va utiliser les quelques commandes ci-dessous :

{"language":"shell","content":"mkdir lang/fr\nvendor/laravel-lang/lang/locales/fr/* lang/fr\nmv lang/fr/fr.json lang\nls lang/fr","filename":"CONSOLE"}


La dernière ligne doit normalement t'afficher 7 fichiers :
auth.php validation-inline.php validation.php
pagination.php validation-nova-inline.php
passwords.php validation-nova.php

Ces fichiers contiennent la traduction Anglais - Français de plusieurs "parties" de Laravel, comme tout ce qui touche aux mots de passe (dans passwords.php), ce qui touche à l'authentification (dans auth.php) et aussi tout ce qui touche à Nova. Nova est une "extension" de Laravel qui permet d'avoir un panneau d'administration déjà tout prêt ! C'est une librairie développée par le créateur de Laravel lui-même. Elle est payante. Personnellement, je ne l'ai jamais utilisée ni eu l'occasion de la tester !

Arthur, l'apprenti développeurOui c'est tout bon pour moi !
Parfait :). Tu verras par la suite que toutes les phrases automatiques de Laravel (messages d'erreur etc) seront maintenant en Français !


Nous allons maintenant attaquer avec du lourd ;). Nous allons commencer par la partie M du modèle MVC en voyant les migrations, les factories et les seedings. Avec ces outils, on ne touchera plus jamais à phpmyadmin (ou au code SQL) !
J'ai terminé cette partie
Demander de l'assistance