这篇文章专门讨论似乎存在的添加您自己的命名空间的简单解决方案,即在 app/autoload.php 中使用加载器的解决方案。
有很多文档都在谈论诸如 registerNamespace 或 registerPrefix 之类的魔术方法。
问题是 UniversalClassLoader 对象存在这些方法。
我下载了 Symfony 标准版 2.2,app/autoload.php 看起来更像这样(与 Symfony 标准版 2.1 几乎相同):
use Doctrine\Common\Annotations\AnnotationRegistry;
$loader = require __DIR__.'/../vendor/autoload.php';
// intl
if (!function_exists('intl_get_error_code')) {
require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';
}
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
return $loader;
实际上使用的加载器是作曲家加载器。如果您希望添加 'seculibs/collections' 命名空间,则可以使用的唯一方法是像这样的 'add' 方法,例如:
$loader->add("seculibs\\collections", __DIR__.'/../vendor/seculibs/collections/');
但这似乎不起作用:当我执行程序时,我对 /seculibs/collections/xx.php 有相同的 classNotFound
所以我像这样更改了 autoload.php :
require_once ('/../vendor/symfony/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php');
use Doctrine\Common\Annotations\AnnotationRegistry;
use Symfony\Component\ClassLoader\UniversalClassLoader;
$loader = require __DIR__.'/../vendor/autoload.php';
$universalLoader = new UniversalClassLoader();
$universalLoader->registerNamespace("seculibs\\collections", __DIR__.'/../vendor/seculibs/collections/');
$universalLoader->register();
// intl
if (!function_exists('intl_get_error_code')) {
require_once __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';
}
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
return $loader;
没有...
但显然它适用于很多人所以..我做错了什么?他们有其他一些可以在秘密网站上找到的 Symfony 版本吗?
其中一门课是这样的:
namespace seculibs\collections;
class LinkedMap {
private $items;
public function __construct() {
$this->items = array();
}
public function __destruct() {
unset($this->items);
}
....