在Symfony控制器中使用重载的全局类

时间:2015-11-05 10:11:38

标签: symfony overloading

我尝试在Symfony控制器文件中包含以下代码:

namespace {
    class LocalSoapClient extends \SoapClient {
        function __doRequest($request, $location, $action, $version) {
            //...............
        }
    }
}
namespace .....\Controller {
    //.......
}

在控制器类中,我尝试使用重载的类:

$service = new \LocalSoapClient($wsdl);

使用\,该类应该在全局命名空间中。但是我得到了错误:

Class 1\LocalSoapClient does not exist in .......\FrontBundle/Controller/

为什么?

如果我使用单个命名空间指令,并且我在Controller类之前重载了该类,则会出现同样的错误。

如何才能使用重载课程?

提前致谢

1 个答案:

答案 0 :(得分:0)

你有2个不要违反的行为:

  1. 请勿将多个班级放入一个档案中。
  2. 不要混合名称空间。原因是,Symfony使用PSR-0 / -4自动加载,而您尝试做的事情无法正常工作。
  3. 解决方案是简单地创建具有适当名称空间的单独文件。

    将以下内容放入src/Your/SomethingBundle/Soap(或您希望文件存放的任何位置):

    <?php
    
    namespace Your\SomethingBundle\Soap;
    
    class LocalSoapClient extends \SoapClient 
    {
        // …
    }
    

    你的控制器应该是这样的:

    <?php
    
    namespace Your\SomethingBundle\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Your\SomethingBundle\Soap\LocalSoapClient;
    
    class MyController extends Controller
    {
        public function myAction()
        {
            $soapClient = new LocalSoapClient();
            // …
        }
    }