gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:50:45 25 4
gpt4 key购买 nike

我有一个 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?

最佳答案

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

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

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

How can I add a namespace to Symfony 2.1? :

How to autoload class

并检查this回答

关于php - 试图从命名空间 (...) 加载类 "ClassName"。即使命名空间被导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com