Laravel:Ajouter un produit
View: 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é');
}
//...
}