php - Zend 应用程序/ Bootstrap 如何工作?

标签 php zend-framework

关于 Zend Framework 1.9 基础知识的几个问题。

  1. 我遵循了快速入门指南,基本上,引导涉及,

    一个。来自 index.php:

    $ZEND_FRAMEWORK_LIB_PATH = '/appl/ZendFramework-1.9.7/library';
    defined('APPLICATION_PATH') || define('APPLICATION_PATH', (realpath(dirname(__FILE__) . '/../application')));
    defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
    set_include_path(implode(PATH_SEPARATOR, array((dirname(dirname(__FILE__)) . '/library'), $ZEND_FRAMEWORK_LIB_PATH, get_include_path(),)));
    require_once 'Zend/Application.php';
    $application = new Zend_Application(APPLICATION_ENV, (APPLICATION_PATH . '/configs/application.ini'));
    $application->bootstrap()->run();
    

    然后在 Bootstrap.php 中,我有

    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array("namespace" => "Default_", "basePath" => dirname(__FILE__),));
        return $autoloader;
    }
    
    protected function _initDoctype()
    {
        $this->bootstrap("view");
        $view = $this->getResource("view");
        $view->doctype("XHTML1_STRICT");
    }
    
  2. 首先,有几件事我不明白:

    一个。如果用户不是通过默认的 index.php 访问该站点,这是否意味着引导(实际上,index.php 中的所有代码,包括环境设置等)都将被绕过?

    没有地方明确调用 Bootstrap 的 _initAutoload()_initDoctype() 方法。那么什么时候隐式调用这些方法呢?

    由于在 index.php 中,我已经将配置文件 '/configs/application.ini'“传递”给 Zend_Application 构造函数,是否有任何方法可以在其他地方检索配置条目?

  3. 在我的应用程序中,我必须使用不同的数据库(所以我不能只使用 resources.db.*)。所以在同一个 application.ini 文件中,我有,例如<​​/p>

    custdb.adapter = "PDO_MYSQL"
    custdb.params.host = "localhost"
    custdb.params.username = "username"
    custdb.params.password = "password"
    custdb.params.dbname = "custdb"
    

    管理数据库适配器的最佳实践是什么?

    一个。是否有可能(我应该)在 index.php 或 Bootstrap.php 中创建数据库适配器并在需要时(以及如何)在其他地方检索它?

    或者是否可以(我应该)只在别处检索配置条目(如何?)并在需要时实例化数据库适配器?

谢谢!

最佳答案

这里有一些答案。

2a。所有请求都重定向到 index.php。这是通过 mod_rewrite 完成的,并在 .htaccess 文件中指定。

2b。 Bootstrap 调用任何以 _init 为前缀的方法。参见 Zend Framework - Theory of Operation

2c。是的。 Zend::Config .您可以在 Zend::Registry 中存储一个实例以便于访问。例如:

$config = new Zend_Config((APPLICATION_PATH . '/configs/application.ini')); 
$application = new Zend_Application(APPLICATION_ENV, $config);
Zend_Registry::set('config', $config);

查看 API 引用以查看这两个类的构造函数。

我认为快速入门没有那么有用。我建议买一本书。我喜欢 Keith Pope 的“Zend Framework 1.8 Web 应用程序开发”。

关于php - Zend 应用程序/ Bootstrap 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2138547/

相关文章:

php - 使用 php 发布到 Facebook 页面

javascript - 中止所有异步请求

javascript - AJAX(无jQuery)对processForm.php的调用不会返回带有responseText的$ _POST ['email']吗?

PHP支付解决方案?

javascript - .htaccess 页面重定向对 AJAX 响应有影响

php - 在 PHP 中运行 MySQL *.sql 文件

php - 根据日期时间列查询记录

php - Zend Framework TDG 与 Doctrine

PHP/JS : How to implement dynamic breadcrumbs?(多窗口/选项卡兼容)

php - 在 Controller (Zend Framework) 中读取 HTTP header