【问题标题】:Attempted to load class "ClassName" from namespace (...). Even though namespace is imported尝试从命名空间 (...) 加载类“ClassName”。即使导入了命名空间
【发布时间】:2015-03-29 10:23:47
【问题描述】:

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

所以,我有一个需要其他课程的课程:

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');
    }
}

然后是加载失败的类(需要另一个文件)

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 可以正确查看所有类,我可以右键单击它们,但部署时会失败。

感谢您的帮助

编辑 - 整个错误信息显示

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?

【问题讨论】:

  • 你使用作曲家吗?
  • 对于自动加载,文件名需要匹配类名。你能发布你的错误信息吗?
  • 是的,我使用作曲家。但我没有用它来创建类。我是不是该?我是 PHP 新手:|那么这是否意味着我需要在一个文件中只有一个类? TwitterOAuth 类位于同名文件中,但它包含更多类。 OAuthConsumer 在文件 OAuth.php 中。

标签: php symfony namespaces


【解决方案1】:

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

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

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

How can I add a namespace to Symfony 2.1?:

How to autoload class

并检查this的答案

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 2017-03-23
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      相关资源
      最近更新 更多