Skip to content

接管整个 filesystem 服务,必须要使用自定义门面吗?使用原本的门面不行吗? #16

@tlerbao

Description

@tlerbao

TP6 的时候就这么写,在 TP8 似乎不行了呢?

  1. 首先 app/service.php 注册服务
return [
    AppService::class,
    FilesystemService::class,
];
  1. 绑定 filesystem 自定义实现
class FilesystemService extends Service
{
    public function register(): void
    {
        // 调试:这里触发了
        // 绑定自定义的Filesystem实现
        $this->app->bind('filesystem', Filesystem::class);
    }
}
  1. 自定义实现 cos oss 等云存储
class Filesystem extends Manager
{
    /**
     * 驱动的命名空间
     */
    protected $namespace = __NAMESPACE__ . '\\driver\\';

   // Filesystem::disk('cos')->putFile('uploads', $file); 这样调用走不到这里呢
    public function disk(?string $name = null): Driver
    {
        return $this->driver($name);
    }

// 其他代码

具体问题

以前就上面这么写,使用原本的 filesystem 门面就行,现在使用thinkphhp 自己的门面不行了,使用自定义的门面可以,为什么呢,现在不能这么写了吗?使用原本的门面走不到步骤 3 的自定义实现中

// 使用默认的门面不行,使用自定义的门面可以
use think\facade\Filesystem;

class Upload extends AdminController
{

    public function image(Request $request)
    {
        // 
        Filesystem::disk('cos')->putFile('uploads', $file);
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions