ClassNotFoundException - 如何在 symfony (2.4.4) 中注册自定义命名空间

Posted

技术标签:

【中文标题】ClassNotFoundException - 如何在 symfony (2.4.4) 中注册自定义命名空间【英文标题】:ClassNotFoundException - how do I register a custom namespace in symfony (2.4.4) 【发布时间】:2014-06-17 02:50:51 【问题描述】:

我有一个新的捆绑包MyBundle 在下面 src/MyVendor/Bundle/MyBundle/

在默认控制器中,我希望使用位于名为 MyVendor\MyComponent 的命名空间中的类 MyClass

位于src/MyVendor/Component/MyComponent/src/MyVendor/MyComponent/MyClass.php

我试过了

use Symfony\Component\ClassLoader\UniversalClassLoader;
$myLoader = new UniversalClassLoader();
$myLoader->registerNamespace( 
    'MyVendor\\MyComponent\\', 
    __DIR__.'/../src/MyVendor/Component/MyComponent/src'
);

app/autoload.php,但我仍然收到ClassNotFoundException 错误。

要么我遗漏了一些微妙的东西,要么我的想法完全错误(错误的 psr-0 目录结构),或者这应该仅通过作曲家的自动加载来完成,例如

"autoload": 
    "psr-0":  
        "MyVendor\\MyComponent\\": 
        "src/MyVendor/Component/MyComponent/src" 
    

composer dump-autoload --optimize

无论哪种情况,我都将不胜感激。

谢谢

【问题讨论】:

【参考方案1】:

好的,我想我已经想通了:

    registerNamespace 在命名空间中不应有尾随 \\ 我需要添加$myLoad->register();

所以整个事情看起来像

use Symfony\Component\ClassLoader\UniversalClassLoader;
$myLoader = new UniversalClassLoader();
$myLoader->registerNamespace( 
    'MyVendor\\MyComponent', 
    __DIR__.'/../src/MyVendor/Component/MyComponent/src'
);
$myLoader->register();

我仍然想看看如何使用 composerdump-autoload 来做到这一点

【讨论】:

以上是关于ClassNotFoundException - 如何在 symfony (2.4.4) 中注册自定义命名空间的主要内容,如果未能解决你的问题,请参考以下文章

ClassNotFoundException:org.sqlite.JDBC

ClassNotFoundException和NoClassDefFoundError

ClassNotFoundException和NoClassDefFoundError

ClassNotFoundException:oracle.jdbc.driver.OracleDriver

如何解决 ClassNotFoundException?

ClassNotFoundException / mysql jdbc驱动程序[重复]