在Zend 1.12中使用Composer Auto-Loader(用于加载外部库)



基本上,我想使用Composer Auto-Loader(用于加载第三方库(,但是我想继续使用内置机制来自动加载Zend 1.12

我添加了以下代码:

<?php // File path: index.php 
// ...
$composerAutoloaderPaths = array(
    '../vendor/autoload.php',
    '../../common/vendor/autoload.php' // store common libraries used by multiple projects, currently that's working by adding the directory in set_include_path()
);
foreach($composerAutoloaderPaths as $composerAutoloaderPath)
{
    if(file_exists($composerAutoloaderPath))
    {
        require_once $composerAutoloaderPath;
    }
    else 
    {
        // handle the error gracefully
    }
}
// ...

另外,我正在使用 Zend_Loader_Autoloader这样:

<?php // File path: Bootstrap.php 
// ...
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('Plugin_');
$autoloader->registerNamespace('Helper_');
// etc.
// ...

使用作曲家和这样的Zend自动加载器是否有担心?

我经常遇到这个问题,我相信这不是实际问题。

IMO最好的方法是将作曲家自动加载器包括在public/index.php中,就像在ZF2/3中所做的那样。这不会改变其余自动加载的事情:https://github.com/zendframework/zendskeletonapplication/blob/master/public/public/index.php#l21

当心:如果您在应用程序中使用了另一个入口点(例如,用于CRON脚本(,则需要添加相同的行(基本上是在应用程序的每个入口点中(。

另外,如果您查看phpmd中的规则,则提供此消息:

文件应声明新符号(类,功能,常数等(,并且不会引起其他副作用,否则应执行逻辑,但不应同时执行两者。

因此,在引导程序中宣布供应商自动加载器的包含可以被视为渎职行为(至少似乎是谁写这个规则和我自己的人之间的共同看法:(。

您可以在Bootstrap.php中自动加载供应商: <?php // File path: Bootstrap.php class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { /** * Inits Vendor */ protected function _initVendor() { require_once APPLICATION_PATH . '/../vendor/autoload.php'; // require_once APPLICATION_PATH . '/new/path/autoload.php'; } ... autoload whatever you want with Zend 1 ... }

我必须建议您使用is_file((而不是file_exists((,因为当目录存在时,file_exists返回true,但是当.php文件存在时不需要

我必须欣赏您对ZF1的韧性,我们都在10年前去过那里。Zend Framework 1.x在其类中充满了require_once。您可以随时在bootstrap.php文件上

在bootstrap.php文件上需要_once另一个文件。

相关内容

  • 没有找到相关文章

最新更新