gpt4 book ai didi

symfony - 使用 UniversalLoader 在 Symfony 2 中添加自定义命名空间

转载 作者:行者123 更新时间:2023-12-04 17:00:35 25 4
gpt4 key购买 nike

这篇文章专门介绍似乎存在添加您自己的命名空间的简单解决方案,该解决方案带有 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;

实际上使用的加载器是 Composer 加载器。如果您希望添加 '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;

没有什么...

但显然它适用于很多人所以..我做错了什么?他们有其他一些可以在 secret 网站上找到的 Symfony 版本吗?

其中一个类(class)是这样的:
namespace seculibs\collections;

class LinkedMap {
private $items;

public function __construct() {
$this->items = array();
}

public function __destruct() {
unset($this->items);
}

....

最佳答案

$loader->add('seculibs\\collections',__DIR__ . '/../vendor');

new LinkedMap();

假设你有文件:vendor/seculibs/collections/LinkedMap.php

通常,您的库中会有另一个级别。就像是:

供应商/MyStuff/seculibs/collections

然后添加行将指向 vendor/MyStuff

关于symfony - 使用 UniversalLoader 在 Symfony 2 中添加自定义命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15274237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com