laravel 调用未定义的方法League\Flysystem\Filesystem::put()

gab6jxml  于 2023-02-20  发布在  其他
关注(0)|答案(2)|浏览(163)

我们已将laravel/framework更新至^9.0版,并将league/flysystem更新至^3.0版。
现在我们有以下错误:Call to undefined method League\Flysystem\Filesystem::put()
产品代码:Storage::disk('disk-name')->put($concept->id.'.docx', file_get_contents($tmpPath));
在flysystem升级指南中,他们说:https://flysystem.thephpleague.com/docs/upgrade-from-1.x/
将put()方法更改为write()方法。
当我查看他们使用的flysystem源代码时:

vendor/league/flysystem/src/Filesystem.php

public function write(string $location, string $contents, array $config = []): void

但当我看到Laravel 9 Storage门面时,他们仍然使用:

applications/kics/vendor/laravel/framework/src/Illuminate/Support/Facades/Storage.php

put

在laravel 9文档中,他们还展示了建议使用put方法的示例。www.example.comhttps://laravel.com/docs/9.x/filesystem#obtaining-disk-instances
有人知道怎么解决这个问题吗?
谢谢!
'

pengsaosao

pengsaosao1#

如果您使用的是自定义文件系统磁盘,则需要在自定义服务提供程序中进行某些更改。https://laravel.com/docs/9.x/upgrade#flysystem-3
旧版

use Illuminate\Support\Facades\Storage;
use League\Flysystem\Filesystem;
use Spatie\Dropbox\Client as DropboxClient;
use Spatie\FlysystemDropbox\DropboxAdapter;
 
Storage::extend('dropbox', function ($app, $config) {
    $client = new DropboxClient(
        $config['authorization_token']
    );
 
    return new Filesystem(new DropboxAdapter($client));
});

新增

use Illuminate\Filesystem\FilesystemAdapter;
use Illuminate\Support\Facades\Storage;
use League\Flysystem\Filesystem;
use Spatie\Dropbox\Client as DropboxClient;
use Spatie\FlysystemDropbox\DropboxAdapter;
 
Storage::extend('dropbox', function ($app, $config) {
    $adapter = new DropboxAdapter(
        new DropboxClient($config['authorization_token'])
    );
 
    return new FilesystemAdapter(
        new Filesystem($adapter, $config),
        $adapter,
        $config
    );
});
23c0lvtd

23c0lvtd2#

在Laravel文档中,它指定Laravel 8和9存在变更。
在Laravel 8中,返回文件系统

return new Filesystem(new DropboxAdapter($client));

但是对于Laravel 9,返回文件系统适配器。

return new FilesystemAdapter(
        new Filesystem($adapter, $config),
        $adapter,
        $config
    );

如果您使用提供程序,请不要忘记更改它。

相关问题