加载自动类HttpFoundation \ Response

时间:2014-06-06 17:56:47

标签: php symfony

我有一个控制器:

<?php
namespace Acme\HelloBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
//use Symfony\Component\HttpFoundation\Response;
class HelloController extends Controller
{
    public function indexAction($name)
    {
        return new Response('<html><body>Hello '.$name.'!</body></html>');
    }
}

当我运行驱动程序时返回错误

  

1/1 ClassNotFoundException:尝试加载类&#34;响应&#34;从   namespace&#34; Acme \ HelloBundle \ Controller&#34;在   D:\ symfony2 \ src \ Acme \ HelloBundle \ Controller \ HelloController.php行   14.你需要&#34;使用&#34;来自另一个命名空间?也许您需要为以下之一添加use语句:   Symfony的\分量\ BrowserKit \响应,   Symfony的\分量\ HttpFoundation \响应,   教义\ CouchDB的\ HTTP \响应。

因为我可以加载&#34;使用Symfony \ Component \ HttpFoundation \ Response;&#34;所有控制器的类,无需将其包含在每个控制器中

请帮助,HttpFoundation \ Response

的自动加载

由于

2 个答案:

答案 0 :(得分:1)

当您使用use语句时,您不包含包含该类的文件,您将使用别名/导入命名空间。

您可以像这样导入命名空间:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

或者您可以为一个类别名,例如,Response类可以别名为SymfonyResponse:

use Symfony\Component\HttpFoundation\Response as SymfonyResponse;

然后您可以在代码中使用新别名:

return new SymfonyResponse('<html><body>Hello '.$name.'!</body></html>');

如果您没有导入类名称空间,则自动加载器会认为您正在尝试在当前名称空间中加载一个响应类:Acme\HelloBundle\Controller并不存在。

现在,如果您不想在文件顶部添加use语句,请使用完全限定名称:

return new \Symfony\Component\HttpFoundation\Response('<html><body>Hello '.$name.'!</body></html>');

我个人会建议不要这样做,因为它会变得很疯狂取决于你使用的是哪些课程...只需添加use语句。有些IDE会自动为您添加(例如PHPStorm)。

有关详细信息,请参阅

  1. Using namespaces: Aliasing/Importing
  2. How to use namespaces, part 1: the basics
  3. How to Use PHP Namespaces, Part 2: Importing, Aliases, and Name Resolution
  4. Composer namespaces in 5 minutes

答案 1 :(得分:0)

执行错误消息所说的内容。取消注释将Request类导入当前命名空间并让自动装带器工作的use语句。

use语句不会触发自动加载,只有在执行的代码中引用该类时才包含该文件。