Création de CRUD avec Laravel Backpack - 3ᵉ Partie
Comment générer automatiquement une interface CRUD ?
Nous allons générer une interface CRUD ("Create, Read, Update, Delete") pour le modèle "Titre" que nous avons défini dans un article précédant.
Pour créer votre premier CRUD avec la table des titres, tapez la commande suivante :
php artisan backpack:crud titre
Création du modèle
Tout d'abord, la commande crée le modèle Titre dans le dossier app/Models de votre projet Laravel. Cependant, puisque le modèle Titre existait déjà dans votre projet (nous l'avions créé dans la 1ʳᵉ partie), le message RU ALREADY EXISTED s'affiche, ce qui signifie que la commande n'a pas recréé le modèle.
Ajout du trait "CrudTrait"
Ensuite, la commande ajoute le trait "CrudTrait" au modèle Titre, ce qui permet à Laravel Backpack de générer automatiquement les fonctionnalités de CRUD pour ce modèle. Le modèle Titre a donc maintenant la définition suivante :
<?php
namespace App\Models;
use Backpack\CRUD\app\Models\Traits\CrudTrait;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Titre extends Model
{
use CrudTrait;
use HasFactory;
/*
|-------------------------------------------------------------
| GLOBAL VARIABLES
|-------------------------------------------------------------
*/
protected $table = 'titres';
// protected $primaryKey = 'id';
// public $timestamps = false;
protected $guarded = ['id'];
protected $fillable = [
'titre',
'categorie_emploi',
'statut'
];
}
Qu'est-ce qu'un trait ?
Un trait est un bloc de code réutilisable que vous pouvez inclure dans une classe en utilisant le mot-clé "use". Les traits permettent aux développeurs de réutiliser du code dans plusieurs classes sans avoir à les dupliquer.
Création du contrôleur
Ensuite, la commande crée un contrôleur "TitreCrudController" dans le dossier app/Http/Controllers/Admin de votre projet. Ce contrôleur gère les opérations CRUD pour le modèle Titre.
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Requests\TitreRequest;
use Backpack\CRUD\app\Http\Controllers\CrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
/**
* Class TitreCrudController
* @package App\Http\Controllers\Admin
* @property-read \Backpack\CRUD\app\Library\CrudPanel\CrudPanel $crud
*/
class TitreCrudController extends CrudController
{
use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation;
use \Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation;
/**
* Configure the CrudPanel object. Apply settings to all operations.
*
* @return void
*/
public function setup()
{
CRUD::setModel(\App\Models\Titre::class);
CRUD::setRoute(config('backpack.base.route_prefix') . '/titre');
CRUD::setEntityNameStrings('titre', 'titres');
}
/**
* Define what happens when the List operation is loaded.
*
* @see https://backpackforlaravel.com/docs/crud-operation-list-entries
* @return void
*/
protected function setupListOperation()
{
CRUD::column('titre');
CRUD::column('categorie_emploi');
CRUD::column('statut');
/**
* Columns can be defined using the fluent syntax or array syntax:
* - CRUD::column('price')->type('number');
* - CRUD::addColumn(['name' => 'price', 'type' => 'number']);
*/
}
/**
* Define what happens when the Create operation is loaded.
*
* @see https://backpackforlaravel.com/docs/crud-operation-create
* @return void
*/
protected function setupCreateOperation()
{
CRUD::setValidation(TitreRequest::class);
CRUD::field('titre');
CRUD::field('categorie_emploi');
CRUD::field('statut');
/**
* Fields can be defined using the fluent syntax or array syntax:
* - CRUD::field('price')->type('number');
* - CRUD::addField(['name' => 'price', 'type' => 'number']));
*/
}
/**
* Define what happens when the Update operation is loaded.
*
* @see https://backpackforlaravel.com/docs/crud-operation-update
* @return void
*/
protected function setupUpdateOperation()
{
$this->setupCreateOperation();
}
}
Création d'une classe de requête
Ensuite, la commande crée une classe de requête "TitreRequest" dans le dossier app/Http/Requests de votre projet. Cette classe de requête est utilisée pour valider les entrées de formulaire avant de les enregistrer dans la base de données. pour l'instant aucune validation n'est définie.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TitreRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
// only allow updates if the user is logged in
return backpack_auth()->check();
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
// 'name' => 'required|min:5|max:255'
];
}
/**
* Get the validation attributes that apply to the request.
*
* @return array
*/
public function attributes()
{
return [
//
];
}
/**
* Get the validation messages that apply to the request.
*
* @return array
*/
public function messages()
{
return [
//
];
}
}
Ajout d'une route
Ensuite, la commande ajoute une route à votre fichier routes/backpack/custom.php pour permettre l'accès à votre interface CRUD.
<?php
use Illuminate\Support\Facades\Route;
// --------------------------
// Custom Backpack Routes
// --------------------------
// This route file is loaded automatically by Backpack\Base.
// Routes you generate using Backpack\Generators will be placed here.
Route::group([
'prefix' => config('backpack.base.route_prefix', 'admin'),
'middleware' => array_merge(
(array) config('backpack.base.web_middleware', 'web'),
(array) config('backpack.base.middleware_key', 'admin')
),
'namespace' => 'App\Http\Controllers\Admin',
], function () { // custom admin routes
Route::crud('titre', 'TitreCrudController');
}); // this should be the absolute last line of this file
Enfin, la commande ajoute une entrée de barre latérale dans le fichier resources/views/vendor/backpack/base/inc/sidebar_content.blade.php de votre projet. Cette entrée de barre latérale permet à l'utilisateur d'accéder facilement à l'interface CRUD pour le modèle Titre.
Démarrer le serveur de développement local pour votre application Laravel par la commande :
php artisan serve
Accéder à votre application en ouvrant votre navigateur Web avec l'adresse http://localhost:8000/rh.
Demande de connexion et authentification
Puisque vous venez de créer votre application et n'avez pas encore configuré l'authentification, vous n'avez probablement pas encore créé de comptes d'utilisateurs. Dans ce cas, vous devrez créer un compte d'utilisateur pour pouvoir vous connecter. Cliquer sur Inscription et remplissez la fiche d'inscription.
Après l'authentification, le tableau de bord sera affiché. Cliquez sur Titres dans la barre latérale.
Dans le prochain article, nous créons un menu déroulant pour les catégories d'emploi et de statut. Nous allons également définir les règles de validation.