0

以前,我使用的是zend 1.x。我可以使用下面的代码自动加载 zend 类。

// autoload class from Zend Lib
require_once ABSPATH.'/classes/Zend/Loader/Autoloader.php'; 
$loader = Zend_Loader_Autoloader::getInstance();    
 try{
// database connection      
$dbo = Zend_Db::factory('pdo_mysql', array( 
        'host'     => DB_HOST, 
        'username' => DB_USER, 
        'password' => DB_PW, 
        'dbname'   => DB_PREFIX.DB_NAME
    )); 
$dbo->getConnection();
// save database adapter for easy usage in other classes
Zend_Db_Table::setDefaultAdapter($dbo);
Zend_Registry::set('db', $dbo);

}catch(Zend_Db_Adapter_Exception $e){
print $e;
 //header("Location: http://www.google.com/error/");
}

我正在升级到 zend 2,因为课程可能会更好。我可以知道如何自动加载它们吗?

4

3 回答 3

2

如果您只是将 ZF2 用作独立库而不使用完整的 MVC 框架,那么自动加载相当简单:

  1. 确保该Zend目录位于您的 php 上include_path
  2. 使用推自动加载器spl_autoload_register

以下基本上是Zend\Loader\StandardAutoloader::loadClass()作为后备自动加载程序时所做的事情:

spl_autoload_register(function($class) {
    $f = stream_resolve_include_path(str_replace('\\', '/', $class) . '.php');
    if ($f !== false) {
        return include $f;
    }
    return false;
});

这将对所有类使用 PSR-1 自动加载机制,而不仅仅是 Zend 类。

或者,您可以执行以下操作:

require_once 'Zend/Loader/StandardAutoloader.php';
$autoloader = new Zend\Loader\StandardAutoloader(array(
    'fallback_autoloader' => true,
));
$autoloader->register();

如上所述,这会将 PSR-1 自动加载应用于所有类。如果您只希望 Zend 类使用此机制,则通过'fallback_autoloader' => false.

于 2013-07-13T17:57:57.450 回答
1

您还可以通过Composer加载各个组件,然后只需require 'vendor/autoload.php';在执行脚本的开头包含。

于 2013-08-12T16:09:17.363 回答
0

我建议你研究ZF2提供的一个骨架应用程序,我对ZF1不太了解,但据我所知ZF2有自己的自动加载机制,就自动加载而言,当你关注Skeleton Application时你会注意到有一个Config\application.config.php这是我们加载所有模块等的文件。作为示例,我将在下面加载我的文件。就设置连接等而言,您会在相同的目录树下找到它们,即“Config\local 或 Config\Global”。

 <?php
return array(
// This should be an array of module namespaces used in the application.
'modules' => array(
    'ZendDeveloperTools',
    'DoctrineModule',
    'DoctrineORMModule',
    'Application',
    'Administration',
    'Account',
    'Manufacturing',
    'GridMain',
),

// These are various options for the listeners attached to the ModuleManager
'module_listener_options' => array(
    'module_paths' => array(
        './module',
        './vendor',
    ),
    'config_glob_paths' => array(
        'config/autoload/{,*.}{global,local}.php',
    ),
),


);
于 2013-07-12T21:13:15.823 回答