基本上,我想使用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文件上