Осветить \ Контракты \ Файловая система \ Фабрика не может быть создан - PullRequest
3 голосов
/ 25 февраля 2020

Я пытаюсь использовать отдельные компоненты laravel. В этом случае я пытаюсь использовать подсветка / http . Он работает нормально, за исключением того, что сохранение файла после загрузки вызывает исключение.

( ! ) Fatal error: Uncaught Illuminate\Contracts\Container\BindingResolutionException: Target [Illuminate\Contracts\Filesystem\Factory] is not instantiable. in /var/www/vendor/illuminate/container/Container.php on line 978
( ! ) Illuminate\Contracts\Container\BindingResolutionException: Target [Illuminate\Contracts\Filesystem\Factory] is not instantiable. in /var/www/vendor/illuminate/container/Container.php on line 978

Это моя начальная загрузка:

use Illuminate\Http\Request;

/** @var Request $request */
$request = new Request(
    $_GET,
    $_POST,
    [],
    $_COOKIE,
    $_FILES,
    $_SERVER
);

И это та часть, где я пытаюсь сохранить файл сообщения формы в моем локальном хранилище :

$request->image->store(APP_PUBLIC.'resources/assets/images/homepage/slider/test.jpg');

Я пытался внедрить Illuminate\Filesystem\Filesystem() как Factory в объект Reqest, но, похоже, это не сработало.

Как внедрить фабрику файловой системы в компонент HTTP?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Я исправил это, правильно добавив необходимые фабрики, конфиги и зарегистрировав их.

composer. json

{
    "require": {
        "illuminate/validation": "^6.16",
        "illuminate/filesystem": "^6.16",
        "illuminate/translation": "^6.16",
        "illuminate/http": "^6.16",
        "illuminate/config": "^6.16",
        "jenssegers/blade": "^1.2",
        "league/flysystem": "^1.0"
    },
}

Начальная загрузка файлового менеджера:

use Illuminate\Container\Container;
use Illuminate\Contracts\Filesystem\Factory as FilesystemFactory;
use Illuminate\Http\Request;
use Illuminate\Filesystem\FilesystemManager;
use Illuminate\Config\Repository;

$instance = Container::getInstance();
$instance->bind('config', function () use ($instance) {
    return new Repository([
        'filesystems' => [
            'default' => 'local',
            'disks' => [
                'local' =>[
                    'driver' => 'local',
                    'root' => '/absolut/path/to/upload/dir/,
                ]
            ]
        ]
    ]);
});

$instance->bind(FilesystemFactory::class, function () use ($instance) {
    return new FilesystemManager($instance);
});

/** @var Request $request */
$request = new Request(
    $_GET,
    $_POST,
    [],
    $_COOKIE,
    $_FILES,
    $_SERVER
);
0 голосов
/ 27 февраля 2020

Вероятно, самый простой способ сохранить файл на диске, используя метод Illuminate\Filesystem\Filesystem::move() или другие методы, когда он работает с автономным компонентом Illuminate\Http\Request и хочет работать с файловой системой. Смотрите код ниже:

<?php

use Illuminate\Http\Request;
use Illuminate\Filesystem\Filesystem;

// Bootstraps request object
$request = new Request(
    $_GET,
    $_POST,
    [],
    $_COOKIE,
    $_FILES,
    $_SERVER
);


// Illuminate\Http\UploadedFile is available on $request->image
$path = $request->image->path();
$extension = $request->image->extension();

// Don't use destination thus. It's for demonstration purpose only
// Make sure upload directory is writable         
$destination = 'uploads/' . mt_rand() . '.' . $extension;

// Here is the moment  
$file = new Filesystem();
$file->move($path, $destination);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...