Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre éprouvé
    Est-ce que cette interface est indiespensalbe dans ce code ?
    Bonjour tout le monde,

    Depuis quelques semaines, je me forme à Laravel grâce (entre autre) à l'excellent tuto de Sillo (https://laravel.sillo.org/laravel-6-2/)

    Je ne suis nullement bloqué, mais je me pose une question "d'organisation" de code.

    Sillo nous informe qu'il est préférable de créer un dossier "Repositories" afin d'y stocker une classe comme celle-ci au lieu de mettre ce code dans le controller :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
        namespace App\Repositories;
     
        use Illuminate\Http\UploadedFile;
     
        class PhotosRepository
        {
            public function save(UploadedFile $image)
            {
                $image->store(config('images.path'), 'public');
            }
        }


    Comme indiqué, ce n'est pas le rôle du controller, je suis d'accord avec lui.

    Par contre, ce qui suit me semble un peu "lourds"... mais si c'est comme ça, je le ferai sans problème :

    Sillo prévoit de créer une interface qui sera liée via un provider à la classe PhotosRepository :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
     
        namespace App\Repositories;
     
        use Illuminate\Http\UploadedFile;
     
        interface PhotosRepositoryInterface
        {
          public function save(UploadedFile $image);
        }


    Il suffit ensuite d’en informer la classe PhotosRepository :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
        class PhotosRepository implements PhotosRepositoryInterface


    Le code du controller qui indique utilise l'injection de dépendance :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        <?php
     
        namespace App\Http\Controllers;
     
        use App\Http\Requests\ImagesRequest;
        use App\Repositories\PhotosRepositoryInterface;
     
        class PhotoController extends Controller
        {
            public function create()
            {
                return view('photo');
            }
     
            public function store(ImagesRequest $request, PhotosRepositoryInterface $photosRepository)
            {
                $photosRepository->save($request->image);
     
                return view('photo_ok');
            }
        }


    Bien sûr, erreur si on ne déclare pas la liaison entre la classe et l'interface :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public function register()
        {
            $this->app->bind(
                'App\Repositories\PhotosRepositoryInterface',
                'App\Repositories\PhotosRepository'
            );
        }


    Ma question : Est-ce que tout cela est la façon de faire officielle avec Laravel ou pensez-vous que l'interface ne soit pas nécessaire ?

    Est-ce une convention de codage ?

    Merci d'avance pour votre avis et votre retour d'expérience.

    bee

  2. #2
    Modérateur

    Le but d'une interface est bien de servir de canevas n je ne vois donc pas trop l’intérêt de la placer à cet endroit.
    Si on créer deux classe de cette interface, comment savoir quelle classe utiliser ?

###raw>template_hook.ano_emploi###