tuto sur youtube:
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
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
php artisan db:wipe // !! Drop all tables, views, and types php artisan migrate
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
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
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
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
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;
Les vues sont générées avec les modèles (templates) en Blade :
https://laravel.com/docs/8.x/blade
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
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
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 :
if (! function_exists('nom_de_ma_fonction')) {
"autoload": { "files": ["app/Helpers/MonFichierHelpers.php",…
composer dump-autoload
pour prendre en compte la modification du composer.json
É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
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
pha config:cache && pha config:clear && composer dump-autoload
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 !!