试图从命名空间 (...) 加载 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?:
并检查this答案
我忘记为我的文件名添加 .php 扩展名
我有一个 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?:
并检查this答案
我忘记为我的文件名添加 .php 扩展名