Création de CRUD avec Laravel Backpack - 3ᵉ Partie

Comment générer automatiquement une interface CRUD ?

Création de CRUD avec Laravel Backpack - 3ᵉ Partie
Gracieuseté de Xavi Cabrera / Unsplash


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
Sortie de la commande 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.

Laravel Inscription

Après l'authentification, le tableau de bord sera affiché. Cliquez sur Titres dans la barre latérale.

CRUD Titre

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.