digicomp / league-flysystem
用于为Flow框架创建league文件系统的工厂
2.1.3
2020-11-02 10:59 UTC
Requires
- php: ^7.2
- digicomp/flowobjectresolving: ~1.0
- league/flysystem: ~1.0
- neos/flow: ~5.3|~6.3
README
此包包含由Frank de Jonge编写的文件系统抽象层工厂。请参阅 http://flysystem.thephpleague.com/
使用文件系统的两种可能性。
-
要在您的项目中使用文件系统,我建议您创建一个接口
/** * @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 */
-
您可以使用一个命名的文件系统。上面的大多数部分仍然有意义,但您不需要将配置数组传递给工厂,您可以在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'
别忘了享受乐趣。