应如何重构 ZF2 站点的会话控制标志


How should session-wise contstant flags be refactored for a ZF2 site?

我正在学习Zend Framework 2教程,准备尝试移植一个相当大的现有应用程序。我正在一点一点地处理它,只是试图将所有部分放在框架内的适当位置,然后再弯下腰来重写所有代码。从概念上讲,许多事情目前对我来说是一个谜。

我现有的应用程序(大约 2006 年)使用 PHP 常量来设置一些基本的模式/状态标志,这些标志在给定用户的当前会话时是持久的。主配置文件做了一些测试来确定,例如,站点是托管在生产服务器还是开发服务器上,站点是否处于嵌入式模式、移动浏览器模式等。这些测试的结果是设置了许多布尔常量。

// Decide if we are on a development server or not
// (enables debug features and experimental functionality)
define('DEVEL', !preg_match('!^(www.)?example.com$!', $_SERVER['SERVER_NAME']));
// Figure out what protocol to use when making CDN calls
define('PROTOCOL', ($_SERVER['SERVER_PORT'] == 80) ? 'http' : 'https');
// Mark which DB server to use
define('DB_SERVER', DEVEL ? 'localhost' : 'db.example.com');
// If we're running inside somebody else's frameset, various bits of the
// template get left out along the way (set with URL parameter)
define('EMBEDDED', check_if_embeded());
// Determine if the browser is a mobile device
define('MOBILE', mobile_device_detect());
// Check to see what features the user has (dis|en)abled
define('SOCIAL', get_user_pref('social'))
define('COMPACT_THEME', get_user_pref('compact_theme'));
然后,在

构建模板时以及在应用程序的各个部分考虑这些因素,因为它们决定应该吐出多少信息。

if (!MOBILE) {
    // Include code only runs on the full site
    if (SOCIAL) {
        // Include links social media tools
    }
}
if (COMPACT_THEME) {
    // Include extra style-sheet with smaller margins
}

其中一些有更合乎逻辑的位置。例如,数据库服务器详细信息位于将进行数据库调用的模块的配置中。在这种情况下,嵌入式标志来自 URL,所以我认为它会以某种方式转移到路由器系统中,我认为这将是一个完全不同的观点,尽管这似乎是重复代码的好方法。

我不清楚的是如何处理更通用的州旗。其中很多都用于页面布局模板。我可以将其中一些破解到主应用程序视图和布局模板中,但这似乎不正确。

在概念级别,对于尝试使用 ZF2 遵循 MVC 模式的站点,这些标志是什么?它们将设置在哪里,在模式的哪个点进行检查?

在调度请求之前,必须检查这些标志。

检查标志的最佳位置是 Module.php 下的 onBootstrap(MvcEvent $e) 方法。

您可以为这些标志检查创建特定模块。在本模块中,您可以根据这些标志配置布局。

该模块只能有一个文件,即 Module.php并且您的所有代码都将在 onBootstrap() 方法中。

[编辑]

要存储这些标志值,您可以:

  • 创建布局变量
  • 创建一个配置值并将其存储在服务管理器中的任何键下