Laravel
Models Migration Relation
Introduction,istallation Strucutre,model,migration Migration,Models,Relation
Les Relations
BelongsTo HasOne HasMany BelongsToMany HasManyThrough
Exemples des Relations
Relations:oneToMany,ManyToMany... Relations:Exemples
Exercices
Exercice 1 Exercice 2
Controllers Views Routes
Routes,Controller,Model,view CRUD: Etudiant CRUD: Car CRUD,Recherche: Book
Validation
Exemple :Projets
Api:Laravel +React
Middleware

Seeders & Factories

Authenfication
Layouts





Models,Controller,View,Routes

Étape 1: Routes (web.php)

Ouvrez le fichier routes/web.php, où vous définissez les routes de votre application.
// routes/web.php

Route::get('/utilisateurs', 'UtilisateurController@index');
Cette route indique que lorsque l'utilisateur accède à l'URL "/utilisateurs", la méthode index du contrôleur UtilisateurController sera appelée.

Exemples des routes

Route::get('/', function () {
    return 'Hello, world!';
});
Cette route correspond à l'URI / et appelle la fermeture function () {...} lorsque l'utilisateur accède à cette URI. La fermeture peut être utilisée pour générer une réponse HTTP, par exemple en renvoyant du texte, du HTML, ou un objet JSON.

Remarque

si on la route n'exites pas dans le fichier de routage (web.php) le serveur afficher error 404

Routes avec des paramètres


Les routes peuvent également accepter des paramètres. Les paramètres sont indiqués par des accolades {} dans l'URI.
Route::get('/articles/{id}', function ($id) {
    return 'L\'article avec l\'ID ' . $id;
});
Cette route correspond à l'URI /articles/{id}. Le paramètre id est récupéré à partir de l'URI et transmis à la fermeture en tant que paramètre $id.

Routes avec plusieurs Paramètres

Route::get('/articles/{parametre2}/{parametre3}', function ($parametre2,$parametre3) {
    //...
});

Routes avec plusieurs méthodes HTTP


Une route peut être définie pour accepter plusieurs verbes HTTP.
Route::match(['get', 'post'], '/', function () {
    return 'Cette route accepte les verbes GET et POST.';
});
Cette route correspond à l'URI / et accepte les verbes HTTP GET et POST.

Routes vers des contrôleurs


Les routes peuvent également être définies pour pointer vers des contrôleurs.
Route::get('/', 'ArticlesController@index');
Cette route correspond à l'URI / et pointe vers la méthode index() du contrôleur ArticlesController.

Routes groupées


Les routes peuvent être regroupées pour partager des paramètres ou des filtres.

//Les routes pour Gérer les clients
Route::group(['prefix' => 'clients'], function () {
Route::get('/ajouter',function(){
    return "<h1>Ajouter Client</h1>";
});

Route::get('/Modifier',function(){
    return "<div>Modifier Client<div>";
});
//get , post ,put,delete,....
});
Ce code définit un groupe de routes avec un préfixe clients. Les routes du groupe partagent le préfixe /clients.

Une route pour afficher une page (vue) :

Route::get('/page1', function () {
    return view('page1');
});
view('page1'); la page page1.blade.php doit etre crée dans le dossier resources/views
<h1>Hello i am page1</h1>

Remarque

Afin d'organiser les vues dans le dossier views il préférable de les mettre dans des dossiers exemple:
GestionProduits/listeProduit on doit créer le dossier GestionProduits dans resources/views puis créer la vue listeProduit.blade.php

Route::get('/produits/liste',function(){
    return view('GestionProduits/listeProduit');
});

GestionProduits/listeProduit.blade.php

<h2>Product List</h2>

<table>
    <thead>
        <tr>
            <th>ID</th>
            <th>Label</th>
            <th>Price</th>
        </tr>
    </thead>
    <tbody>
        <!-- Replace the content inside the tbody with your product data -->
        <tr>
            <td>1</td>
            <td>Product A</td>
            <td>$19.99</td>
        </tr>
        <tr>
            <td>2</td>
            <td>Product B</td>
            <td>$29.99</td>
        </tr>
        <!-- Add more rows as needed -->
    </tbody>
</table>

Utilisation du controlleur

Une route pour afficher une liste d'articles :
Route::get('/articles',"App\Http\Controllers\ArticlesController@index");
lorsque on reçoit la request /articles la méthode index sera exécutée
on doit créer la fonctionindex dans le controlleur ArticlesController

Étape 1:créer Controller (ArticlesController)

php artisan make:controller ArticlesController
le controlleur ArticlesController est crée dans le dossier app/Http/Controllers
 //namespace :permet de spécifier le package (dossier) ou la classe est créee
namespace App\Http\Controllers;


class ArticlesController extends Controller
{
    function index()
    {
        return "<h1>Liste Article</h1>.......";
        //ou
        //return view("ListeArticle");
    }
}
Remarque
on peut définir les routes des fonctions d'un controlleur dans web.php aussi avec le syntaxe suivant:
//importer le controlleur 
use App\Http\Controllers\ArticlesController;

//définir la route
Route::get('/articles', [ArticlesController::class,"index"]);

Étape 3: Model et migration

php artisan make:model Article -m
-m pemet de créer aussi la migration

Models/Article

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

//permet de communiquer avec la base de données
class Article extends Model
{

   protected $table="articles";
   protected $primaryKey="id";
   protected $fillable=["nom"];

}

Migration :Article

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->id();
            $table->string("nom");
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('articles');
    }
};
Lancer la migration :
php artisan migrate:refresh

Ajouter la fonction AfficherListeArticles() dans le controlleur ArticlesController

namespace App\Http\Controllers;
//importer le model
use App\Models\Article;

use Illuminate\Http\Request;

class ArticlesController extends Controller
{

    function AfficherListeArticles()
    {   //Article =>le model Article
        //all() =>select * from Articles
       $listeArticle= Article::all();
       //envoyer lesArticles à la vueArticles.blade.php)  contenant les données $listeArticle pour les affichés
       return view("VueArticles",["lesArticles"=>$listeArticle]);

    }
}

Créer la vue VueArticles.blade.php dans le dossier resources/views

<h1>Liste articles</h1>
<table>
    <thead>
        <th>Id</th>
        <th>Nom</th>
    </thead>
    <tbody>
        <!-- @... le language Blade -->
        @foreach($lesArticles as $art)
        <tr>
            <td>{{$art->id}}</td>
            <td>{{$art->nom}}</td>
        </tr>
        @endforeach
   </tbody>
</table>

Créer une route pour la fonction AfficherListeArticles dans le fichier web.php

Route::get('/listeArticles',"App\Http\Controllers\ArticlesController@AfficherListeArticles");