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

时间:2014-04-30 16:57:38

标签: symfony autoload psr-0

我有一个新的包MyBundle src/MyVendor/Bundle/MyBundle/

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

位于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 个答案:

答案 0 :(得分:0)

好的,我想我已经明白了:

  1. registerNamespace不应在命名空间
  2. 中尾随\\
  3. 我需要添加$myLoad->register();
  4. 所以整个事情看起来像

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

    我仍然希望了解如何使用composerdump-autoload

    执行此操作