Illuminate\Contracts\Filesystem\Factory 不可实例化
Illuminate\Contracts\Filesystem\Factory is not instantiable
我尝试使用 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
);
这是我尝试在本地存储中存储表单 post 文件的部分:
$request->image->store(APP_PUBLIC.'resources/assets/images/homepage/slider/test.jpg');
我试图将 Illuminate\Filesystem\Filesystem()
as Factory 注入到 Reqest 对象中,但它似乎不起作用。
如何将文件系统工厂注入到 HTTP 组件中?
我通过正确添加必要的工厂、配置并注册它们来修复它。
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
);
可能是使用 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);
我尝试使用 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
);
这是我尝试在本地存储中存储表单 post 文件的部分:
$request->image->store(APP_PUBLIC.'resources/assets/images/homepage/slider/test.jpg');
我试图将 Illuminate\Filesystem\Filesystem()
as Factory 注入到 Reqest 对象中,但它似乎不起作用。
如何将文件系统工厂注入到 HTTP 组件中?
我通过正确添加必要的工厂、配置并注册它们来修复它。
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
);
可能是使用 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);