是的,这个问题似乎偶尔会出现,直到掌握了 ZF 中的命名空间(本机命名空间)。这是我对此的看法。这是给所有在场的人只是想正确加载一些使用命名空间的第三方。这非常简单。
我用的是采埃孚1.11.11
(根据文档,所有 ZF 版本 1.10+ 都可以工作)。
首先,从 1.10 开始,ZF 支持本机 PHP 命名空间自动加载,前提是它们符合PSR-0标准.
我想在 ZF1 项目中添加 Symfony2 EventManager 组件。
首先,与类名一样,命名空间必须与库中的路径匹配。
所以,命名空间Symfony\Component\EventDispatcher\EventDispatcher
映射到path/to/lib/Symfony/Component/EventDispatcher/EventDispatcher.php
(where path/to/lib/
is APPLICATION_PATH . '/library'
;你明白了)。我必须提到库文件夹必须位于 include_path 中吗?不,我想我不知道。
现在是不那么棘手的部分:
<?php
// bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initNsAutoload()
{
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('Symfony'); // this is why is dead simple
/* Don't believe me? Try it:
Zend_Registry::set('events', new Symfony\Component\EventDispatcher\EventDispatcher());
*/
}
}
在控制器中使用命名空间导入怎么样?
<?php
use Symfony\Component\EventDispatcher\Event,
Symfony\Component\EventDispatcher\EventDispatcher;
class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
var_dump(new EventDispatcher());
var_dump(new Event());
}
}
因此,只要您使用的是 ZF 1.10+,就不需要定制自动装载机。这个回复是我看了之后做出的this.
LE:或将其添加到应用程序.ini:
autoloaderNamespaces[] = Symfony