我有一个控制器:
<?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
的自动加载由于
答案 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 :(得分:0)
执行错误消息所说的内容。取消注释将Request类导入当前命名空间并让自动装带器工作的use语句。
use语句不会触发自动加载,只有在执行的代码中引用该类时才包含该文件。