我昨天在LaminasSlack上提出了一个问题,我意识到它应该是一篇博文。问题是:
有没有办法在Mezzio中注册仅限开发模式的模块?
有没有办法在Mezzio中注册仅限开发模式的模块?
实际上有多种方法可以做到这一点,尽管其中一种可能比其他方法更可取。
条件配置提供者
我们已经在Mezzio骨架应用程序中提供了一种模式来执行此操作,如果类存在,则有条件地包括mezzio-swooleConfigProvider
:
class_exists(\Some\ConfigProvider::class) ? \Some\ConfigProvider::class : function (): array { return []; },
或者,您可以将其表示为匿名函数:
function (): array { if (class_exists(\Some\ConfigProvider::class)) { return (new \Some\ConfigProvider())(); } return []; },
(提供给ConfigAggregator
构造函数的值可以是配置提供程序的字符串类名,也可以是返回数组的函数,这就是它们都可以工作的原因。)
如果配置提供程序仅作为require-dev
依赖项安装,则此方法主要有用。但是如果您在自己的代码中定义配置提供程序,并且它总是现在?
开发模式配置聚合
另一种可能性是围绕laminas-development-mode如何与Mezzio一起工作进行一些“黑客攻击”。Mezzio中的laminas-development-mode与config/autoload/development.local.php.dist
文件;启用开发模式符号链接config/autoload/development.local.php到该文件。该文件只需要返回一个数组。因此,您完全可以编写它来聚合其他配置提供程序以及一些默认开发配置,使用您在主配置文件中使用的相同工具:
// in config/autoload/development.local.php.dist: declare(strict_types=1); use Laminas\ConfigAggregator\ArrayProvider; use Laminas\ConfigAggregator\ConfigAggregator; $developmentConfig = [ // app-level development config you want to define ]; $aggregator = new ConfigAggregator([ // any ConfigProviders you want to list, then: new ArrayProvider($developmentConfig), ]); return $aggregator->getMergedConfig();
这种方法可能是最好用的方法,因为它可以在您的主配置中更清楚地说明默认模块是什么,并且任何仅供开发人员使用的模块现在都列在此文件中。