之前我问过类似的问题,但没有正确的答案。也许我没有解释好。
我想在symfony项目中添加2个自己的类。
seculibs/collections/A.php
和seculibs/collections/B.php
(它不在github上,它是本地的)。
我想在vendor文件夹中添加我的seculibs文件夹,并让symfony加载这些类。
显然,所有事情都发生在app/autoload.php
我认为这样做可以,但不是:
$loader->add('seculibs/collections',__DIR__ . '/../vendor/seculibs/collections/');
它仍然找不到类。
有人可以告诉我到底要做什么吗?我和Symfony 2.3.6
请不要composer.json
及UniversalClassLoader
及其registerNamespaces
方法,因为这不是我在autoload.php
答案 0 :(得分:1)
所以我找到了正确的语法......它会帮助其他人
$loader->add('seculibs\\collections',__DIR__ . '/../vendor');
答案 1 :(得分:0)
你必须自动加载课程吗?我已经使用了我自己的类,只需在我的项目中给它们一个命名空间,然后在我想要使用它们的文件中包含use
语句。例如,我有一个我放的类在我的项目中的自定义位置src/My/AppBundle/Utils/MyClass.php
,在MyClass.php
文件中,我提供了名称空间My/AppBundle/Utils
现在在控制器中,我将该类包含在正常的use
语句中。
use My/AppBundle/Utils/MyClass.php
// .....
class MyController extends Controller {
// ....
}
这样我可以通过引用命名空间在我的应用程序中的任何地方使用我的类。我知道这种方法与您的预期不同,但效果很好。
更新:
放置文件的位置无关紧要。如果你想要它们在vendor文件夹中,把它们放在那里,并给它们一个有意义的命名空间。
所以也许你有这样的事情:
// in vendors/MyUtils/Classes/MyClass.php
namespace MyUtils/Classes
class MyClass {
// ....
}
然后你仍然可以像我提到的那样用use
语句包含该类。
答案 2 :(得分:0)
查看vendor / composer / ClassLoader.php 您可以看到add方法需要前缀作为第一个参数。如果您的类没有命名空间,则可以将其留空。
假设您的类没有命名空间,请使用:
$loader->add(null,__DIR__ . '/../vendor/seculibs/collections/');
$a = new \A();
如果他们确实有一个命名空间,那么只需传递命名空间的前缀即可添加。
$loader->add('Cerad',__DIR__ . '/../vendor/seculibs/collections/');
namespace Cerad\Collections;
class A {}
$a = new Cerad\Collections\A();
当然,您还必须在供应商目录下拥有Cerad \ Collections目录结构。
============================================== < / p>
更新
如果你有/vendor/seculibs/collectionsA.php:
namespace seculibs\collections;
class A {
然后使用:
$loader->add('seculibs',__DIR__ . '/../vendor/');
和
use seculibs\collections\A;
$a = new A();