У меня есть следующая структура.проблема с пространством имен в laravel?
app/
acme/
Providers/
Services/
CloudServices/
Files/
FielsInterface.php
s3Files.php
Images/
ImageEditorInterface.php
ImageEditor.php
Я использую s3files через его связывание в контроллере путем добавления
use Acme\Services\CloudServices\Files\FilesInterface
в верхней части контроллера, а затем с помощью конструктора и он прекрасно работает.
Теперь я хочу, чтобы использовать его в ImageEditor.php, чье пространство имен
Acme\Services\Images
но со следующим кодом я получаю ошибку типа говоря, аргумент два должен быть экземпляром FilesInterface, но никто не дал
<?php namespace Acme\Services\Images;
use IntImage;
use Response;
use Acme\Services\CloudServices\Files\FilesInterface;
/**
*
*/
class ImageEditor implements ImageEditorInterface
{
protected $imageeditor;
protected $files;
protected $imageSizes = array(
"thumbnail" => array(
"h" => 50,
"w" => 50
),
"x-small" => array(
"h" => 150,
"w" => 150
),
"small" => array(
"h" => 390,
"w" => 360
)
);
public function __construct(IntImage $imageeditor, FilesInterface $files)
{
$this->imageeditor = $imageeditor;
$this->files = $files;
}
Видел, что он работает в контроллере. Я предполагаю, что мое заявление о применении неверно, но я понятия не имею, чем оно должен быть вместо этого?
edit1:
ImageEditor впрыскивается и используется в контроллере, как так
<?php
use Acme\Services\Images\ImageEditorInterface;
use Acme\Services\CloudServices\Files\FilesInterface;
class ImagesController extends BaseController
{
protected $image;
protected $editor;
protected $files;
protected $queue;
public function __construct(Image $image, ImageEditorInterface $editor, FilesInterface $files, Queue $queue)
{
$this->image = $image;
$this->editor = $editor;
$this->files = $files;
$this->queue = $queue;
$this->beforeFilter('auth', array('except' => array('show')));
}
public function store()
{
$this->editor->createUserImages()
}
EDIT2: в Acme/Поставщики/FilesServiceProvider.php у меня есть, не то, что делать то, что вы описали? Также, как я могу использовать реализацию файлов в контроллере, не может ли он предположить, что эта часть настроена правильно?
<?php namespace TrainerCompare\Providers;
use Illuminate\Support\ServiceProvider;
use TrainerCompare\Services\CloudServices\Files\S3Files;
use AWS;
/**
*
*/
class FilesServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('TrainerCompare\Services\CloudServices\Files\FilesInterface', function() {
$aws = new AWS;
return new S3Files($aws);
});
}
}
Как и где вы создаете свой ImageEditor? –
Пожалуйста, проверьте мои изменения. Я думаю, что я добавил информацию, которую вы ищете. – Ir1sh