Après avoir exposé les concepts fondamentaux du modèle MVC, il est temps de se concentrer sur la mise en pratique de ces concepts pour la création d'opérations CRUD efficaces et sécurisées dans Laravel. Passons à un autre sujet passionnant et explorons les méthodes et avantages du CRUD en Laravel.
Le terme CRUD est étroitement lié avec la gestion des données numériques. Il représente les opérations ou fonctions qu’un utilisateur a besoin pour la gestion des données. Ce sujet des opérations CRUD est essentiel dans le développement web. Toute application nécessite une interface utilisateur pour interagir avec les données stockées dans une base de données. Le CRUD permet donc d'ajouter, de lire, de mettre à jour et de supprimer ces données.
Cependant, les opérations CRUD doivent être sécurisées pour éviter toute exploitation malveillante. Les développeurs doivent être en mesure de comprendre les risques liés aux opérations CRUD, comme les attaques par injection SQL et les attaques par cross-site scripting (XSS), et prendre les mesures appropriées pour les éviter.
Etapes à suivre pour mettre un CRUD en application sur Laravel8
Nous allons mettre en place un utilisateur(Users) qui pourra exécuter les différentes opérations qui s'effectue avec le CRUD
Etape1: Installer Laravel 8
Pour commencer le processus de generation du CRUD en Laravel 8 , on a besoin d'installer Laravel 8 avec la commande suivante:
1 composer create-project laravel/Laravel:8.0 Laravel
Etape2: Configuration de la base de données
On ira dans notre fichier .env
Dans ce fichier on va préciser le nom de la base et les identifiants pour y accéder :
1 DB_CONNECTION= <nom_de_votre_application>
2 DB_HOST=127.0.0.1
3 DB_PORT=3306
4 DB_DATABASE= <nom_votre base_donnees>
5 DB_USERNAME=username(root) de la base de données
6 DB_PASSWORD=<mot_passe_base_de_donnees>
Pour l'instant la base de données est vide. Laravel dispose d'un outil de migration pour créer des tables, les modifier et bien d'autres.
NB: les informations à entrer ne doivent pas contenir de l'espace. Vous pouviez utiliser des sous_traits
Etape 3: Creation de la table
Nous créons une table user dans notre base de données et cela effectue la migration. Pour plus d'informations vous pouvez consulter le site de Laravel .
php artisan make:migration create_users_table --create table
Après cette commande un nouveau fichier se crée automatiquement dans le répertoire database/migrations nous allons ouvrir notre fichier de migration et insérer le code suivant:
Notez que le fichier vient déjà avec son code, on n'aura qu'à ajouter ce qui nous manque
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
Nous allons à présent lancer la migration avec cette commande. Pour plus d'informations sur les commandes aller sur le site de laravel
php artisan migrate
Etape4: Ajout du Controller et du Model
Entrer de la commande suivante dans le terminal
php artisan make:controller UserController --resource --model=User
Après l'exécution de la commande vous trouverez un nouveau fichier dans le dossier suivant
"app/Http/Controllers/UserController.php"
Dans le controller nous allons créer sept méthodes par défaut :
index()
create()
store()
show()
edit()
update()
destroy()
```php
namespace App\Http\Controllers;
use App\Models\User; use Illuminate\Http\Request;
class UserController extends Controller { /**
- Display a listing of the resource. *
@return \Illuminate\Http\Response */ public function index() { $users = User::latest()->paginate(5);
return view('user.index',compact('users')) ->with('i', (request()->input('page', 1) - 1) * 5); }
/**
- Show the form for creating a new resource. *
@return \Illuminate\Http\Response */ public function create() { return view('user.create'); }
/**
- Store a newly created resource in storage. *
- @param \Illuminate\Http\Request $request
@return \Illuminate\Http\Response */ public function store(Request $request) { $request->validate([ 'name' => 'required', 'email' => 'required', ]);
User::create($request->all());
return redirect()->route('user.index') ->with('success','User created successfully.'); }
/**
- Display the specified resource. *
- @param \App\User $user
@return \Illuminate\Http\Response */ public function show(User $user) { return view('user.show',compact('user')); }
/**
- Show the form for editing the specified resource. *
- @param \App\User $user
@return \Illuminate\Http\Response */ public function edit(User $user) { return view('user.edit',compact('user')); }
/**
- Update the specified resource in storage. *
- @param \Illuminate\Http\Request $request
- @param \App\User $user
@return \Illuminate\Http\Response */ public function update(Request $request, User $user) { $request->validate([ 'name' => 'required', 'email' => 'required', ]);
$user->update($request->all());
return redirect()->route('users.index') ->with('success','User update done'); }
/**
- Remove the specified resource from storage. *
- @param \App\User $user
@return \Illuminate\Http\Response */ public function destroy(User $user) { $user->delete();
return redirect()->route('user.index') ->with('success','User delete done.'); } } ```
A present nous irons dans le répertoire "app/Models/User.php" et coller le code ci dessous dans le fichier User.php :
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
Etape 5: Ajout des Routes
Nous avions besoin d'ajouter des routes pour implémenter le crud de notre application. Il faut donc ouvrir notre fichier "routes/web.php" et ajouter cette route.
use App\Http\Controllers\UserController;
Route::resource('users', UserController::class);
Etape 6: Ajouts des fichiers
layout.blade.php
Coller le code dans ressources/views/users/layout.blade.php
<!DOCTYPE html>
<html>
<head>
<title> CRUD Application in Laravel </title>
</head>
<body>
<div class="container">
@yield('content')
</div>
</body>
</html>
index.blade.php
Coller ce code dans resources/views/users/index.blade.php
@extends('users.layout')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Laravel 8 CRUD Example f</h2>
</div>
<div class="pull-right">
<a class="btn btn-success" href="{{ route('users.create') }}"> Create New user</a>
</div>
</div>
</div>
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered">
<tr>
<th>No</th>
<th>Name</th>
<th>Email</th>
<th width="280px">Action</th>
</tr>
@foreach ($users as $user)
<tr>
<td>{{ ++$i }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
<td>
<form action="{{ route('users.destroy',$user->id) }}" method="POST">
<a class="btn btn-info" href="{{ route('users.show',$user->id) }}">Show</a>
<a class="btn btn-primary" href="{{ route('users.edit',$user->id) }}">Edit</a>
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">Delete</button>
</form>
</td>
</tr>
@endforeach
</table>
{!! $users->links() !!}
@endsection
create.blade.php
Coller le code dans resources/views/users/create.blade.php
@extends('users.layout')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Ajout d'un Utilisateur</h2>
</div>
<div class="pull-right">
<a class="btn btn-primary" href="{{ route('users.index') }}"> Back</a>
</div>
</div>
</div>
@if ($errors->any())
<div class="alert alert-danger">
There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('users.store') }}" method="POST">
@csrf
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Name:</strong>
<input type="text" name="name" class="form-control" placeholder="Name">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>email:</strong>
<textarea class="form-control" style="height:150px" name="email" placeholder="Email"></textarea>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
@endsection
edit.blade.php
resources/views/users/edit.blade.php
@extends('users.layout')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Modification de l'Utilisateur</h2>
</div>
<div class="pull-right">
<a class="btn btn-primary" href="{{ route('users.index') }}"> Back</a>
</div>
</div>
</div>
@if ($errors->any())
<div class="alert alert-danger">
There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('users.update',$user->id) }}" method="POST">
@csrf
@method('PUT')
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Name:</strong>
<input type="text" name="name" value="{{ $user->name }}" class="form-control" placeholder="Name">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Email:</strong>
<textarea class="form-control" style="height:150px" name="email" placeholder="Email">{{ $user->email }}</textarea>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
@endsection
show.blade.php
resources/views/users/show.blade.php
@extends('users.layout')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2> Show User</h2>
</div>
<div class="pull-right">
<a class="btn btn-primary" href="{{ route('users.index') }}"> Back</a>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Name:</strong>
{{ $user->name }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Email:</strong>
{{ $user->email }}
</div>
</div>
</div>
@endsection
Etape7: Démarrage du CRUD
A la fin de toute ces étapes nous devons maintenant lancer notre application avec cette commande
php artisan serve
Après quelques secondes le serveur démarre et vous pouvez ouvrir l'URL dans votre navigateur:
Eh bien félicitations vous venez d'implémenter le CRUD en Laravel 8.Vous pouvez partager avec vos amis et me donner vos retours.
En conclusion, le CRUD en Laravel offre une solution efficace et pratique pour la création et la gestion des opérations de base dans une application web. Il est essentiel pour tout développeur de comprendre les avantages et les risques liés à ce sujet pour créer des applications web robustes, sécurisées et évolutives.