У меня есть контроллер и FileUploader :: class. Загрузчик внедряется в метод контроллера __construct. Когда я использую этот внедренный экземпляр в коде (см. Ниже), я получаю один и тот же объект каждый раз.
Я реорганизовал класс (см. Вторую часть кода) без использования встроенного свойства - это работает. Но я хочу следовать одному стилю в проекте.
Когда это была одна загрузка файла, она работала нормально, но для решения по загрузке нескольких файлов, с циклом, это не работает.
class ProposalFileController extends Controller
{
public $fileUploader;
public function __construct(FileUploader $fileUploader)
{
$this->fileUploader = $fileUploader;
}
public function upload(ProposalFileUpload $request)
{
$files = [];
foreach ($request->file('files') as $file)
{
/** !!! Attention here !!!!!!!
In this loop, $this->fileUploader is same obj each time
**/
$files[] = $this->fileUploader->upload($file);
}
return response()
->json([
'data' => $files
]);
}
}
Мне нужен новый экземпляр загрузчика каждый раз. Класс ниже работает, но мне не нравится его стиль. Как я могу решить это с помощью решения DI?
class ProposalFileController extends Controller
{
public $fileUploader;
public function __construct(FileUploader $fileUploader)
{
$this->fileUploader = $fileUploader;
}
public function upload(ProposalFileUpload $request)
{
$files = [];
foreach ($request->file('files') as $file)
{
$uploader = new FileUploader(new File());
$files[] = $uploader->upload($file);
}
return response()
->json([
'data' => $files
]);
}
}
FileUpload :: класс
class FileUploader implements Uploader
{
use UploadHelper;
private $file;
public function __construct(File $file)
{
$this->file = $file;
}
public function upload(UploadedFile $file)
{
$saveName = $this->fileName($file);
/** Save file to s3 */
$storagePath = Storage::disk('s3')->put(...);
/** Set cover_rel - relative path needed for delete file needs */
$this->file->setAttribute('file_rel', $storagePath);
$this->file->save();
return $this->file;
}
}
В конце концов, у меня есть массив с одним и тем же файлом n раз (то же самое с шагами цикла)