【问题标题】:Illuminate\Contracts\Filesystem\Factory is not instantiableIlluminate\Contracts\Filesystem\Factory 不可实例化
【发布时间】:2020-06-08 23:56:29
【问题描述】:

我尝试使用 laravel 的独立组件。在这种情况下,我尝试使用illuminate/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 组件中?

【问题讨论】:

    标签: php laravel illuminate


    【解决方案1】:

    我通过正确添加必要的工厂、配置并注册它们来修复它。

    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
    );
    

    【讨论】:

      【解决方案2】:

      当使用独立的Illuminate\Http\Request 组件并希望使用文件系统时,这可能是使用Illuminate\Filesystem\Filesystem::move() 方法或其他方法将文件保存在磁盘上的最简单方法。请看下面的代码:

      <?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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-30
        • 1970-01-01
        • 2016-06-22
        • 2016-08-08
        • 2018-01-02
        • 2017-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多