Outils pour utilisateurs

Outils du site


informatique:laravel

Laravel

Création d'un projet

Il suffit de lancer la commande composer :

composer create-project laravel/laravel mon-projet
cd mon-projet
# ajout module doctrine 
composer require doctrine/dbal

Ça utilisera la dernière version de Laravel

Pour démarrer le serveur en dev

php artisan serve --port=8000

Bases de données

Accès à la base de données :
Les paramètres sont définis dans le fichier .env (.env.local, utiliser s'il existe)

Créer un modèle (càd du pt de vue bdd, une table) et sa migration:

php artisan make:model Article --migration

le fichier créer est placé dans le répertoire app

Pour créer les attributs (ce qui est appelé migration), il faut aller dans le répertoire database/migrations

On peut s'aider de l'aide de Laravel:
https://laravel.com/docs/8.x/migrations#available-column-types
et de blueprint dans l'api de laravel:
https://laravel.com/api/8.x/Illuminate/Database/Schema/Blueprint.html

à la création de l'appli, trois tables sont automatiquement prévues: users, passwords et failed_jobs
Pour les clés étrangères, il faut bien être en innodb ET pré-définir l'attribut recevant la clé comme →unsigned() 1)
php artisan db:wipe // !! Drop all tables, views, and types
php artisan migrate

Seeder (données de test ou de base)

php artisan make:seeder MesDonneesSeeder

crée le fichier dans database/seeds à compléter
puis:

php artisan db:seed
# ou
php artisan db:seed --category=MesDonneesSeeder::class

https://laravel.com/docs/8.x/seeding

Modifier une table

2) Il est souvent nécessaire d'ajouter/enlever des attributs à une table de la base de données. On commence par créer une migration:

php artisan make:migration

On appelle, au lieu de la méthode create, la méthode table :

public function up() {
  Schema::table('nom_de_la_table', function(Blueprint $table) {
    $table->string('attribut_à_ajouter')->nullable();
  });
}

liste des “modifiers” : https://laravel.com/docs/8.x/migrations#column-modifiers

Pour supprimer un attribut :

public function down()
    {
        Schema::table('nom_de_la_table', function (Blueprint $table) {
			$table->dropColumn('attribut_à_ajouter');
        });
        // en deux passes s'il y a une clé étrangère :
        Schema::table('sample', function (Blueprint $table) {
			$table->dropForeign(['supposed_origin_id']);
        });
        Schema::table('sample', function (Blueprint $table) {
			$table->dropColumn('supposed_origin_id');
        });
        // ou il peut être plus simple (et plus propre) de simplement supprimer toute la table en opposition de sa `creation`:
        Schema::drop('nom_de_la_table');
 
    }

et on applique la modification avec

php artisan migrate

si on veut revenir en arrière, on fait:

php artisan migrate:rollback

"Squashing migrations" ou comment rationaliser les migrations

Créer un schéma correspondant aux cumul de migration, et supprime les migrations qui ne sont donc plus utiles :

php artisan schema:dump --prune

Controlleurs

php artisan make:controller NomController

ou si on veut créer le CRUD:

php artisan make:controller NomController --resource

qui crée les 7 méthodes (Create:create/store, Read:index,show(id), Update:edit(id)/update, Delete: destroy)
les fichiers sont créé dans app/Http/Controllers

Accéder aux données d'un model

Voici quelques requêtes qui deviennent très simple avec Eloquent :

// récupérer un objet grâce à son id :
$ceramic_category = CeramicCategory::find($id);
// mais on va vite avoir besoin de rechercher par son nom ou un autre attribut :
$ceramic_category = CeramicCategory::where('name', 'C.ENG.GLAC')->first();
// ou par la date :
$ceramic_description = CeramicDescription::where('created_at', '>', '2021-06-22')->first();
// et pour générer une liste de choix :
$ceramic_categories = CeramicCategory::all()->sortBy('name');

et on obtient un objet, donc on en profite :

// pour accéder à l'id :
$ceramic_category->id;
// ou au nom :
$ceramic_category->name;

Vues

Les vues sont générées avec les modèles (templates) en Blade :
https://laravel.com/docs/8.x/blade

Formulaires

Si on veut utiliser la classe Form, il faut ajouter au projet:

composer require laravelcollective/html


qui ajoute la v6.x dont la doc se trouve:
https://laravelcollective.com/docs/6.x/html

Pour gérer l'auto-complétion (1er cas… celui des auteurs des images d'artefacts v3) : https://gitlab.huma-num.fr/bdavid/artefacts/-/issues/438#note_39908

Authenfication

Je me suis basé en partie sur la page https://laravel.com/docs/7.x/authentication
mais après vérification de la présence le laravel/ui dans composer.json, j'ai renommé resources/views/layouts/app.blade.php avant de lancer 3)

pha ui:auth

puis regardé le diff avec le fichier app.blade.php d'avant pour remettre les dépendances (css, js) et le titre.
Le bandeau intègre bien login/register, et les contrôleurs ont bien été créés. Si on a un nom de table différent de users, il faut bien le définir :
https://stackoverflow.com/a/44932219/6614155
Pour désactiver/activer les routes register, reset, verify, cf. https://gitlab.huma-num.fr/leyango/cahier/-/issues/119

Helpers

On a souvent besoin de fonctions pour mettre en forme des données (to_canonical, extract_csv…). Si c'est très spécifique, la fonction peut être intégrée à la classe d'un contrôleur, mais il est souvent intéressant de la mettre à disposition de l'ensemble du projet.
Pour cela, on a les helpers. Il faut :

  1. créer un fichier dans le répertoire app/Helpers
  2. ajouter un test d'existence de la fonction à ajouter :
    if (! function_exists('nom_de_ma_fonction')) {
  3. définir la fonction
  4. ajouter le chemin vers ce fichier helper dans composer.json à
    "autoload": { "files": ["app/Helpers/MonFichierHelpers.php",…
  5. exécuter
    composer dump-autoload

    pour prendre en compte la modification du composer.json

Pour le développement et le traçage

Équivalent de var_dump:

dump($ma_variable);
# et aussi dd qui arrête l'execution !
dd($ma_variable);

Si c'est dans une vue :

{{ dump($ma_variable) }} 
#ou 
{{ dd($ma_variable) }}

et Log:

use Illuminate\Support\Facades\Log;
 
$user = User::find(4);  
Log::info(’Utilisateur chargé !, $user->toArray());

qui écrit dans <répertoire-projet>/storage/logs/laravel.log

Les CACHE(s)

Si les caches sont un atout pour un site en prod, ils peuvent être la source de comportements qui semblent incompréhensibles.

Nettoyer le cache (dont bootstrap/cache/config.php qui contient l'accès à la base de données !) :

pha cache:clear

4)
ou encore 5)

pha config:cache && pha config:clear && composer dump-autoload
Le nettoyage du(des) cache(s) peut entraîner un 500 server error, il peut alors être utile de supprimer le fichier bootstrap/share/config.php

Le cache des route : S'il est actif, on peut toujours changer, ajouter des routes, la liste est inchangé !
La commande

pha route:clear

s'impose alors !!

informatique/laravel.txt · Dernière modification : 2023/01/18 14:27 de bertrand