digicomp/league-flysystem

用于为Flow框架创建league文件系统的工厂

2.1.3 2020-11-02 10:59 UTC

This package is auto-updated.

Last update: 2024-08-29 05:43:34 UTC


README

此包包含由Frank de Jonge编写的文件系统抽象层工厂。请参阅 http://flysystem.thephpleague.com/

使用文件系统的两种可能性。

  1. 要在您的项目中使用文件系统,我建议您创建一个接口

     /**
      * @method array listFiles(string $path = '', boolean $recursive = false)
      * @method array listPaths(string $path = '', boolean $recursive = false)
      */
     interface MyFilesystemInterface extends FilesystemInterface {}
    

    并使用您的 Objects.yaml 进行配置

    AcMe\Package\SourceFilesystemInterface:
      scope: 'singleton'
      factoryObjectName: 'DigiComp\League\Flysystem\FilesystemFactory'
      factoryMethodName: 'create'
      arguments:
        1:
          setting: 'AcMe.Package.filesystem'
        2:
          value: ['ListPaths', 'ListFiles']

    而您的 Settings.yaml 可能看起来像这样

    AcMe:
      Package:
        filesystem:
          adapter: 'League\Flysystem\Adapter\Ftp'
          adapterArguments:
            config:
              host: 'digital-competence.de'
              username: 'user'
              password: 'password'
              root: '/path/for/root'
          filesystemConfig:
            visibility: public
            disable_asserts: true

    用于工厂的第一个参数的数组期望一个 "adapter",允许一个 "filesystemConfig" - 键和所有用于配置适配器实例化的构造函数参数。

    所有其他键都将被当作适配器的属性设置器。

    第二个参数是插件列表,应该添加到您的文件系统中。如果没有包前缀,它们将在 League\Flysystem\Plugin 中查找。如果您写的是 AcMe.Package:MyPlugin,工厂将查找名为 \AcMe\Package\FlysystemPlugin\MyPlugin 的插件。

    之后,您可以让Flow为您注入文件系统

     /**
      * @var AcMe\Package\MyFilesystemInterface
      * @Flow\Inject
      */
    
  2. 您可以使用一个命名的文件系统。上面的大多数部分仍然有意义,但您不需要将配置数组传递给工厂,您可以在Filesystem.yaml中配置它并给它一个名字。

    DigiComp.League.Flysystem.TestingFilesystem:
      adapter: 'League\Flysystem\Adapter\Local'
      adapterArguments:
        root: '%FLOW_PATH_PACKAGES%Application/DigiComp.League.Flysystem'
      filesystemConfig:
        visibility: 'public'
      plugins: ['ListPaths', 'ListFiles']

    然后在Objects.yaml中使用不同的工厂方法

    AcMe\Package\SourceFilesystemInterface:
      scope: 'singleton'
      factoryObjectName: 'DigiComp\League\Flysystem\FilesystemFactory'
      factoryMethodName: 'createNamedFilesystem'
      arguments:
        1:
          value: 'DigiComp.League.Flysystem.TestingFilesystem'

别忘了享受乐趣。