是否在application.config.php中有条件地包含模块?

是否在application.config.php中有条件地包含模块?,php,zend-framework2,Php,Zend Framework2,对于Zend Framework 2,如果满足某些路由条件,是否有一种内置方法来加载某些模块 这是一个非常糟糕的例子。假设一个登录和注册页面被构建为单独的模块,您就会知道登录模块不需要使用/register作为当前路径进行实例化 如果你能回顾一下我的可怕的例子,我认为逻辑是合理的……一些模块提供了一些监听器和触发器,除非它们的路线在发挥作用,否则它们根本不会被使用。在一个每分钟提供数千次服务的站点上,尽可能避免引导开销 我想在我采取行动之前先问问周围的人 谢谢 虽然可以有条件地加载模块,但不会基

对于Zend Framework 2,如果满足某些路由条件,是否有一种内置方法来加载某些模块

这是一个非常糟糕的例子。假设一个登录和注册页面被构建为单独的模块,您就会知道登录模块不需要使用/register作为当前路径进行实例化

如果你能回顾一下我的可怕的例子,我认为逻辑是合理的……一些模块提供了一些监听器和触发器,除非它们的路线在发挥作用,否则它们根本不会被使用。在一个每分钟提供数千次服务的站点上,尽可能避免引导开销

我想在我采取行动之前先问问周围的人


谢谢

虽然可以有条件地加载模块,但不会基于路由,因为所有应用程序路由都位于模块中。ZF2如何知道哪些模块可能具有附加了“模块加载”条件的路由而不首先加载它们


ZF2中的模块引导开销非常低。这是一个比ZF1有很大改进的领域。这不太可能成为应用程序的瓶颈,所以除非您知道问题存在,否则不要尝试解决问题

希望这还不算太晚。我需要解决一个类似的问题,即我只想在从Cli工作时加载Cli模块。这是我在application.config.php文件中执行的操作

return call_user_func(function() { $modules = array( 'Application', ); if (\Zend\Console\Console::isConsole()) { $modules[] = 'Cli'; } else { $modules[] = 'Api'; $modules[] = 'Mobile'; } return array( 'modules' => $modules, // Other application config options ); });
通常,此文件将具有返回数组/*…*/;但是通过将其转换为函数,您可以应用任何您喜欢的逻辑。

啊,sonofa,我从来没有想到过这一点,这是一个好主意。我以不同的方式解决了这个问题,但肯定会为此奖励分数。