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:
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:
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:
class PhotosRepository implements PhotosRepositoryInterface
Le code du controller qui indique utilise l'injection de dépendance :
Code:
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:
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