Php 在Zend 1.12中使用Composer自动加载程序(用于加载外部库)?

Php 在Zend 1.12中使用Composer自动加载程序(用于加载外部库)?,php,zend-framework,composer-php,autoload,Php,Zend Framework,Composer Php,Autoload,基本上,我希望使用Composer自动加载程序(用于加载第三方库),但我希望继续使用Zend 1.12中的内置机制来自动加载 我添加了以下代码: <?php // File path: index.php // ... $composerAutoloaderPaths = array( '../vendor/autoload.php', '../../common/vendor/autoload.php' // store common libraries used

基本上,我希望使用Composer自动加载程序(用于加载第三方库),但我希望继续使用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
    }
}

// ...

像这样使用Composer和Zend Autoloader有什么值得担心的吗?

您可以像这样在bootstrap.php中自动加载供应商:
您可以在bootstrap.php中自动加载供应商,如下所示:

我不得不佩服你对ZF1的韧性,我们都在10年前就已经做到了。Zend Framework 1.x在其类中充满了require_。

您可以随时在Bootstrap.php文件上再次要求使用另一个文件。我不得不佩服您对ZF1的弹性,我们都在10年前就有了。Zend Framework 1.x在其类中充满了require_。
您可以随时在Bootstrap.php文件上请求另一个文件,我经常遇到这个问题,我相信这不是实际问题

IMO最好的方法是只在
public/index.php
中包含composer autoloader,就像在ZF2/3中那样。这不会改变自动加载的其余部分:

注意:如果在应用程序中使用了另一个入口点(例如cron脚本),则需要添加相同的行(基本上在应用程序的每个入口点中)

此外,如果您查看phpmd中的规则,则会显示以下消息:

一个文件应该声明新的符号(类、函数、常量等),并且不会产生其他副作用,或者它应该执行带有副作用的逻辑,但不应该同时执行这两个操作


因此,在引导中声明包含供应商自动加载器可能被视为一种不当行为(至少似乎是编写此规则的人和我之间的共同观点:)。

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

IMO最好的方法是只在
public/index.php
中包含composer autoloader,就像在ZF2/3中那样。这不会改变自动加载的其余部分:

注意:如果在应用程序中使用了另一个入口点(例如cron脚本),则需要添加相同的行(基本上在应用程序的每个入口点中)

此外,如果您查看phpmd中的规则,则会显示以下消息:

一个文件应该声明新的符号(类、函数、常量等),并且不会产生其他副作用,或者它应该执行带有副作用的逻辑,但不应该同时执行这两个操作

因此,在引导中声明包含供应商自动加载器可能被视为一种不当行为(至少似乎是编写此规则的人和我之间的共同观点:)

<?php // File path: Bootstrap.php 

// ...

$autoloader = Zend_Loader_Autoloader::getInstance();

$autoloader->registerNamespace('Plugin_');
$autoloader->registerNamespace('Helper_');
// etc.

// ...