Comment créer une interface dans Laravel ?

Initialisation

Une interface définit un ensemble de méthodes qu’une classe doit implémenter. En termes simples, c’est une manière de garantir que différentes classes ont certains comportements communs.

Laravel 11 propose une structure d’application plus légère et introduit des fonctionnalités comme une structure optimisée, une limitation de taux par seconde (per-second rate limiting), des routes (health routing), etc.

Laravel 11 a ajouté une nouvelle commande Artisan pour créer une interface. Vous pouvez utiliser la commande suivante pour créer une nouvelle interface dans Laravel 11 :

php artisan make:interface {interfaceName}

Exemple : Créer une interface dans Laravel

Exécutez la commande suivante pour créer l’interface PostInterface :

php artisan make:interface Interfaces/PostInterface

Définir des fonctions dans l’interface – Ajoutez les fonctions publishPost() et getPostDetails() dans le fichier PostInterface.php :

app/Interfaces/PostInterface.php

<?php
  
namespace App\Interfaces;
  
interface PostInterface
{
    public function publishPost($title, $content);
    public function getPostDetails($postId);
}

Créer des classes

Créez deux nouvelles classes  et implémentez l’interface PostInterface :

php artisan make:class Services/WordpressService
php artisan make:class Services/ShopifyService

Mettez à jour les fichiers comme suit :

app/Services/WordpressService.php

<?php
  
namespace App\Services;
  
use App\Interfaces\PostInterface;
  
class WordPressService implements PostInterface
{
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function publishPost($title, $content) {
        info("Publish post in WordPress");
    }
      
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function getPostDetails($postId) {
        info("Get post details from WordPress");
    }
}

app/Services/ShopifyService.php

<?php
  
namespace App\Services;
  
use App\Interfaces\PostInterface;
   
class ShopifyService implements PostInterface
{
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function publishPost($title, $content) {
        info("Publish post in Shopify");
    }
      
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function getPostDetails($postId) {
        info("Get post details from Shopify");
    }
}

Créer des contrôleurs

php artisan make:controller WordPressPostController
php artisan make:controller ShopifyPostController

Ajoutez le code suivant dans les contrôleurs :

app/Http/Controllers/WordpressPostController.php

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\Services\WordpressService;
  
class WordPressPostController extends Controller
{
    protected $wordpressService;
    
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function __construct(WordPressService $wordpressService) {
        $this->wordpressService = $wordpressService;
    }
      
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function index(Request $request) {
          
        $this->wordpressService->publishPost('This is title.', 'This is body.');
          
        return response()->json(['message' => 'Post published successfully']);
    }
}

app/Http/Controllers/ShopifyPostController.php

<?php
  
namespace App\Http\Controllers;
   
use Illuminate\Http\Request;
use App\Services\ShopifyService;
   
class ShopifyPostController extends Controller
{
    protected $shopifyService;
      
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function __construct(ShopifyService $shopifyService) {
        $this->shopifyService = $shopifyService;
    }
      
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function index(Request $request) {
          
        $this->shopifyService->publishPost('This is title.', 'This is body.');
           
        return response()->json(['message' => 'Post published successfully']);
    }
}

routes/web.php

<?php
  
use Illuminate\Support\Facades\Route;
  
use App\Http\Controllers\WordpressPostController;
use App\Http\Controllers\ShopifyPostController;
  
Route::get('/post-wordpress', [WordpressPostController::class, 'index']);
Route::get('/post-shopify', [ShopifyPostController::class, 'index']);

Résultat attendu

Lorsque vous accédez aux routes définies, vous verrez les résultats suivants dans les journaux :

[2024-03-03 17:05:09] local.INFO: Publish post in WordPress  
[2024-03-03 17:05:14] local.INFO: Publish post in Shopify

 

par