zend-framework - Zend Framework - 在 Bootstrap 中获取请求对象

标签 zend-framework zend-controller-plugin zend-app-bootstrap

我正在设计一个具有以下网址形式的网站:
example.com/controller/action/locale
其中我从 uri 参数区域设置获取区域设置。

在 Bootstrap 中,当我想要初始化我的资源(例如 Zend_Locale、Zend_Translator 或配置 Zend_Validate_Date 之类的组件的其他资源)时,它们都需要区域设置数据。 此外,我可能想根据收到的区域设置使用不同的数据库。 但由于 Bootstrap 中通常没有可用的 uri 参数,因此我需要在 Controller 插件中初始化上述所有内容,这对我来说似乎毫无意义。

总之,我认为请求对象和 uri 参数应该在 bootstrap 中可用。所以Zend Framework目前的设计缺少了这一点。

我是对的还是遗漏了什么?

最佳答案

抱歉,但您的建议是个坏主意。引导的目的是通过初始化所需的设置、变量等使库进入工作状态。

Bootstrap 应该做的一些事情:

  • 将自定义路径添加到“include_path”
  • 初始化字符集 (UTF-8) 和编码指令 (mb_internal_encoding)
  • 初始化记录器(错误或应用日志记录)
  • 初始化自动加载器

您的应用程序应该在 Controller 层处理您的需求。例如,如果用户访问 example.com/controller/action/en-US,您的 Controller 可以通过访问请求对象(和指定参数)来设置相应的语言,并设置用户 session 变量以英语显示当前和后续页面.

-- 编辑--

使用中间类初始化 i18n/区域设置与将值传递给 Bootstrap 的示例实现:

// Controller

$i18n = new i18n();

$i18n->setLocale($this->getRequest()->getParameter('locale'));

// Now I can make locale specific calls to validate localized data
$i18n->validateDate($this->getRequest()->getParameter('date'));

// Can also make queries for locale specific data
$results = $i18n->getDob()->query('select * from my_table');

// i18n class
class i18n
{
    protected $locale;

    public function setLocale($locale)
    {
        $this->locale = $locale;
    }

    public function getLocale()
    {
        return $this->locale;
    }

    // Factory method for creating a database object based on locale
    public function getDbo()
    {
        switch ($this->getLocale()) {

            case 'en-US':
                return new Zend_Db::factory('Pdo_Mysql', array(
                    'host' => 'hostname',
                    'username' => 'username',
                    'password' => 'password',
                    'dbname' => 'en_us_locale'
                ));

            case 'en-GB':
                return new Zend_Db::factory('Pdo_Mysql', array(
                    'host' => 'hostname',
                    'username' => 'username',
                    'password' => 'password',
                    'dbname' => 'en_gb_locale'
                ));
        }
    }
}

关于zend-framework - Zend Framework - 在 Bootstrap 中获取请求对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8948274/

相关文章:

php - 引导后访问 Zend 应用程序 Bootstrap _init 函数

mysql - 如何在 SQL 中订购包括单词顺序

php - 将对象转换为数组时删除 _(下划线)

php - 如何在不使用 ZF2.. 中的任何 Controller 对象的情况下访问 module.php 中的 Controller 插件?

zend-framework - 如何在 session 期间从 Zend application.ini 文件中检索参数?

mysql - Zend 框架 : select distinct rows by two fields

php - 带有 zend 框架的应用程序只显示 index.php,不管 url 是什么

zend-framework3 - 如何在 ZF3 上的 Controller 插件中获取翻译器

zend-framework - 在 View 中使用 Zend_Acl 来显示/隐藏部分 View 的方法是什么