Я решаюсь создавать собственные классы и службы в своем приложении Laravel
.
В настоящий момент я создаю службу для хранения файлов в моем хранилище, однако я хотел бы вернуть данные в Speci c формат, и я его не понимаю.
Это мои классы:
<?php
namespace App\Services\Storage;
use Ramsey\Uuid\Uuid;
class StorageService
{
private $context;
private $file;
private $fileName;
public static function context($context)
{
return new StorageService($context);
}
private function __construct($context)
{
$this->context = $context;
}
public function store($file)
{
$this->file = $file;
$this->fileName = (string)Uuid::uuid4();
// Functions to store the file
return new FileData($this);
}
}
Этот класс вызывается сразу после сохранения файла и в основном служит для возврата данных связанный с файлом:
<?php
namespace App\Services\Storage;
class FileData
{
private $file;
public function __construct($storage)
{
$this->file = $storage;
}
public function getContext()
{
return $this->file->context;
}
public function getName()
{
return $this->file->fileName;
}
public function getDataAsArray()
{
return [
'context' => $this->getContext(),
'name' => $this->getName()
];
}
}
Я хотел бы сохранить файл и вернуть его данные следующим образом:
$file = StorageService::context('support')
->store($request->file('file'))
->getDataAsArray();
Model::create($file);
При использовании вышеуказанного метода я получаю следующую ошибку:
Cannot access private property App\Services\Storage\StorageService::$context
class: "App\Services\Storage\FileData"
file: "/app/Services/Storage/FileData.php"
function: "getContext"
Я не могу объявить переменные publi c, так как не хочу, чтобы это происходило:
StorageService::context('support')->context;
Есть ли другой способ передать данные из StorageService::class
в FileData::class
без необходимости передавать все переменные по отдельности в __construct ()
?
Спасибо