试图从命名空间 (...) 加载 class "ClassName"。即使命名空间被导入

Attempted to load class "ClassName" from namespace (...). Even though namespace is imported

我有一个 Symfony 项目,我向其中添加了一些包含各种 classes 的非 symfony php 文件。但是由于某些原因,在加载网站时 classes 没有被加载,即使 IDE 可以正确地看到它们。

所以,我有一个 class 需要其他 classes:

namespace rootspace\FrontBundle\Controller;

use rootspace\FrontBundle\Networks\TwitterOAuth;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class TwitterController extends Controller
{
    public function connectAction(){
        // The TwitterOAuth instance
        $connection = new TwitterOAuth('abc', '123');
    }
}

然后 class 加载失败(需要另一个文件)

namespace rootspace\FrontBundle\Networks;

/* Load OAuth lib. You can find it at http://oauth.net */
//require_once('OAuth.php'); -- should this be commented out?

/**
 * Twitter OAuth class
 */
class TwitterOAuth {
  /* Contains the last HTTP status code returned. */
}

最后,第三个文件

namespace rootspace\FrontBundle\Networks;
use Symfony\Component\Config\Definition\Exception\Exception;

class OAuthConsumer
{
    public $key;
    public $secret;
}
(...)

我想实际的文件名并不重要,对吧?也不是他们的结构? PhpStorm 可以正确查看所有 classes,我可以右键单击它们,但在部署时失败。

感谢帮助

编辑 - 整个错误消息说

Attempted to load class "TwitterOAuth" from namespace "rootspace\FrontBundle\Networks" in D:\Dropbox\project\src\rootspace\FrontBundle\Controller\TwitterController.php line 15. Do you need to "use" it from another namespace?

这是因为 Symfony 的自动加载器遵循 PSR 标准 (PSR-0, PSR-4),即完全限定(带命名空间)class 名称转换为文件位置和名称。所以实际上文件名 很重要 。 因此,在您的情况下,rootspace\FrontBundle\Networks\TwitterOAuth class 应该位于名为 TwitterOAuth.php

的文件中的 rootspace/FrontBundle/Networks 目录中

如果您使用的 classes 不符合 PSR 标准,您也可以在 app/autoloader.php 文件中手动注册它们

检查这些以获取更多信息:

How can I add a namespace to Symfony 2.1?:

How to autoload class

并检查this答案

我忘记为我的文件名添加 .php 扩展名