开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

Mezzio 的开发模式模块

我昨天在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();

这种方法可能是最好用的方法,因为它可以在您的主配置中更清楚地说明默认模块是什么,并且任何仅供开发人员使用的模块现在都列在此文件中。

未经允许不得转载:我爱分享网 » Mezzio 的开发模式模块

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏