Laravel
Models Migration Relation
Introduction Installation Projet:Structure Strucutre,model,migration Migration,Models,Relation Artisan CLI Migrations:Exemples Models:Exemples Relations:Exemples 1 Relations:Exemples 2
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
Les Routes
Définir:Routes Routes avec Paramètres Routes nommées Groupes de routes
Les Controllers
Les Controllers Les Contrôleurs de Ressources
Les Vues
Vues et Blade Templates Blade Layouts et Sections Sous-vues Composants et Slots Contrôles de flux
MVC :CRUD
CRUD: Produit CRUD: Etudiant CRUD: Car CRUD,Recherche: Book
Validation
Exemple :Projets
ORM:Eloquent
Exemple :Transport
Api:Laravel +React
Middleware

Seeders & Factories
Exemples :EFM

Authenfication
TP:Schools Management
Authenfication:React
Layouts
Exercices





Laravel:Ajouter un produit

View: create.blade.php

Afin d'ajouter un nouveau produit dans la table produits dont doit créer le formulaire create.blade.php:
├── resources
│    ├── views
│    │     ├── produit
│    │     │     ├── create.blade.php

 <!-- produits.store:la route POST:prouits/store -->
<form action="{{Route('produits.store')}}" method="POST"
     enctype="multipart/form-data"><!--car on a un fichier à upload -->
    @csrf <!-- Permet d'ajouter la sécurité contre les attaques csrf -->
<fieldset>
<legend>Ajouter un produit</legend>
<table>
<tr>
<td>Libelle</td>
<td><input type="text" name="libelle"/>
<!--  Affichre le message de validation-->
@error('libelle')
   <span class="text-danger">{{$message}}</span>
@enderror
</td>
</tr>

<tr>
<td>Marque</td>
<td><select name="marque">
<option>Marque 1</option>
<option>Marque 2</option>
</select>
<!--  Affichre le message de validation-->
@error('marque')
   <span class="text-danger">{{$message}}</span>
@enderror
</td>
</tr>

<tr>
<td>Prix</td>
<td><input type="number" name="prix"/>
<!--  Affichre le message de validation-->
@error('prix')
   <span class="text-danger">{{$message}}</span>
@enderror
</td>
</tr>

<tr>
<td>Stock</td>
<td><input type="number" name="qteStock"/></td>
</tr>

<tr>
<td>Image</td>
<td><input type="file" name="image"/></td>
</tr>

<tr>
<td><input type="submit" name="valider"/></td>
</tr>

</table>    
</fieldset>

<!-- Afficher un message envoyé par store-->
@if(session('msg'))
<p>
    {{session('msg')}}
</p>
@endif

<!-- Afficher les errors envoyés pr store-->
@if(count($errors)>0)
<ul style="color:red;">
@foreach($errors->all() as $erreur)
 <li>{{$erreur}}</li>
@endforeach
</ul>
@endif
</form>

Controller: ProduitController.php

├── app
    ├── Http
        ├── Controllers
	│     ├── ProduitController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
//importer le model
use App\Models\Produit;
//importer la validation
use Illuminate\Support\Facades\Validator;


class ProduitController extends Controller
{
 
   //afficher le formulaire pour ajouter un produit:
    //mappée avec la route :GET : /produits/create
    public function create()
    {
        return view('produit.create');
    }


    public function store(Request $request)
    {
//1. valider les champs obligatoire
    $validate = Validator::make($request->all(), [
        'libelle' => 'required|max:25',
        'marque' => 'required',
        'prix' => 'required',
        'qteStock' => 'required',
    ],[
        'libelle.required' => 'le nom est obligatoire.',
        'libelle.max' => 'ne doit pas dépasser 25 caractres.',
        'prix.required'=>'le prix est obligatoires',
    ]);
    //si erreur de validation envoyer les messages à la vue create
    if($validate->fails()){
    return back()->withErrors($validate->errors())->withInput();
   }
//2.uplodad image car produit a une image
     //Créer le dossier images dans le dossier public
    $chemin = 'images';
    //récupérer l'image
    $file = $request->file('image');
    $extension=$file->getClientOriginalExtension();
    $taille=$file->getSize();
    //farie des traitements
    if($extension!='jpg' or $taille>100000)
    {
        return redirect()->route('produits.create')->with('message','image doit etre etre jpg et de taille<10M');
   
    }
    else
    {
    //ajouter le nom de l'image
    $chemin=$chemin.'/'.$file->getClientOriginalName();
   
    //importer l'image dans le dossier images
    $file->move("images",$file->getClientOriginalName());
    }

//3.insérer le produit dans la table produits
    $produit_nouveau=$request->post();
    $produit_nouveau['image']=$chemin;

    //insert into produits....
    Produit::create($produit_nouveau);
    //faire une redirection vers la vue create et affiché un message
   return redirect()->route('produits.create')->with('msg','Le produit est bien ajouté');

    }
//...
   
}