Я попытался реализовать шаблон проектирования адаптера в своем приложении laravel.Пришлось использовать больше чем облако для загрузки изображений напр. (Облачное хранилище Google, amazon s3).
1 - я создал интерфейс с именем ImageUploderInterface.
2 - я создал для классов класс AmazonCloudFrontServiceи GoogleCloudStorageService каждый из них реализует ImageUploderInterface.
3 - Я создал поставщика услуг, чтобы зарегистрировать мой интерфейс и вернуть определенный объект из одного класса (AmazonCloudFrontService ИЛИ GoogleCloudStorageService) в зависимости от env varaible.
4- Я зарегистрировал своего поставщика услуг в config / app.php.
5-, затем я пытаюсь внедрить ImageUploderInterface в мой контроллер, но у меня была ошибка, что интерфейс не выходит.
интерфейс загрузки изображений
<?php
namespace App\Interfaces;
interface ImageUploderInterface
{
public function uploadImage($file, $uploadFolder);
public function retrieveImage($fileName, $uploadFolder);
}
поставщик услуг
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Interfaces\ImageUploderInterface;
use App\Services\AmazonCloudFrontService;
use App\Services\GoogleCloudStorageService;
class ImageUploadServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->singleton(ImageUploderInterface::class, function ($app) {
switch ($app->make('config')->get('services.image-uploader')) {
case 'amazon':
return new AmazonCloudFrontService;
case 'gcs':
return new GoogleCloudStorageService;
default:
throw new \RuntimeException("Unknown upload image Service");
}
});
}
}
Ошибка
сообщение: «Приложение класса \ Interfaces \ ImageUploadInterface не существует», исключение: «ReflectionException»,…} исключение: файл «ReflectionException»: «/ var / www / vendor / laravel / framework / src/Illuminate/Container/Container.php "строка: 826 сообщение:" Приложение класса \ Interfaces \ ImageUploadInterface не существует "