ZendFramework3的一个方面,我们特别关注的是利用Composerecosystem。我们现在提供了许多Composer插件,用于处理初始项目安装、向应用程序注册已安装的模块等。这是我特别想谈的“更多”。
安装时注册模块
借助ZF2,我们能够实现将第三方模块安装到现有应用程序中的能力,从而实现模块生态系统。安装的标准口头禅是:
- 安装模块:
composerrequiresome/module
- 向应用程序注册模块:编辑
config/(application|modules).config.php
并将Some\Module
添加到模块列表中。
这第二个项目有问题:
- 容易忘记
- 容易打错字
对于v3版本,我们希望尽可能解决这个问题。我们能够通过Composer插件zend-component-installer来完成。
模块作者现在可以将一些元数据添加到他们的包中,如下所示:
"extra": { "zf": { "module": "Some\\Module" } }
并且,如果插件存在于用户的应用程序中,则在安装时,它会将包注册为应用程序的模块!(此外,如果您稍后删除包,它会删除它!)
我们还添加了允许将包指定为组件的规则;在这种情况下,模块被添加到模块列表的顶部,以确保用户空间模块可以覆盖其设置。
这种通过Composer完成一项常见任务的能力让我很高兴。
通过Composer自动加载您自己的模块
最近,在开发Apigility时,一位合作者提出了一个建议:“我们建议使用Composer进行自动加载,但Apigility创建的模块使用默认的模块自动加载功能;我们不能创建一个实用程序来启用Composer自动加载生成的模块吗?”
事实证明这很容易实现,我们最终创建了一个新包zfcampus/zf-composer-autoloading,以使其可重复使用。
假设您在ZF或Apigility应用程序中创建了一个名为Blog
的新模块。很有可能,您将一个Module.php
文件放在模块的根目录下,它要么包含一个Blog\Module
类,要么需要一个来自您的源代码树的类文件。让我们设置自动加载:
$ composer require --dev zfcampus/zf-composer-autoloading $ ./vendor/bin/autoload-module-via-composer Blog
完成。
该软件包仅附带一个供应商二进制文件,它执行以下操作:
- 在您的
composer.json
中添加一个条目以自动加载模块。 - 重新生成Composer自动加载规则。
它会根据检测到的目录结构自动检测模块类型(PSR-0或PSR-4),但也允许您通过CLI标志指定类型。如果Composer二进制文件不在您的路径上,您还可以告诉它它在哪里。
完成后,如果您在模块中定义了getAutoloaderConfig()
方法,您现在可以删除它,因为它是多余的!
此工具适用于任何版本的现有ZF2和Apigility安装。
作曲家!