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 expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    mars 2004
    Messages
    3 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : mars 2004
    Messages : 3 597
    Points : 1 302
    Points
    1 302
    Par défaut 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

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    juin 2005
    Messages
    5 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 5 174
    Points : 11 706
    Points
    11 706
    Par défaut
    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 ?

Discussions similaires

  1. Une iframe est apparu dans mon code !
    Par Ariochs dans le forum Sécurité
    Réponses: 5
    Dernier message: 03/05/2010, 18h46
  2. [AC-2007] Est-il possible de savoir si qq'un est "entré" dans le code vba ?
    Par tibofo dans le forum VBA Access
    Réponses: 7
    Dernier message: 14/01/2010, 15h39
  3. Intégration interface déjà créée dans le code php
    Par guipe dans le forum Webdesign & Ergonomie
    Réponses: 3
    Dernier message: 03/06/2009, 14h10
  4. L'erreur n'est pas dans le code mais où ?
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 04/05/2009, 16h43
  5. interfaces a integrer dans le code
    Par pepito31 dans le forum EDI et Outils pour Java
    Réponses: 1
    Dernier message: 16/06/2007, 22h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo