试图在类(Symfony)上调​​用方法“getDoctrine”

我正在尝试创建一个小应用程序,使用symfony / doctrine通过id从表中读取记录。 我的步骤:

  • 创建控制器(GS OrderBunndle Controller CustomerCuntroller.php),路由。 测试网址 - 它正在工作;
  • 使用列和getter / setter为客户表(GS OrderBundle Entity Customer.php)创建实体;
  • 3)创建GS OrderBundle Entity CustomerRepository.php(我不知道为什么我还需要它,它是自动生成的)。 源代码:

    namespace GSOrderBundleEntity;
    
    use DoctrineORMEntityRepository;
    
    class CustomerRepository extends EntityRepository
    {
    }
    

    4)修改的CustomerController.php:

    <?php
    
    namespace GSOrderBundleController;
    use SymfonyComponentHttpFoundationResponse;
    use GSOrderBundleEntityCustomer;
    use DoctrineORMEntityManager; 
    
    class CustomerController 
    {
    
        public function indexAction($id)
        {
                $customer = $this->getDoctrine()->getRepository('GSOrderBundle:Customer')->find($id);
                   return new Response(
                '<html><body>Number: '.$id.'</body></html>'
            );
        }
    }
    

    并得到以下错误:

    试图在类“GS OrderBundle Controller CustomerController”上调用方法“getDoctrine”。

    500内部服务器错误 - UndefinedMethodException

    堆栈跟踪

    在第13行的src / GS / OrderBundle / Controller / CustomerController.php中 - public function indexAction($ id){$ customer = $ this-> getDoctrine() - > getRepository('GSOrderBundle:Customer') - > find($ id ); 返回新的回复('Number:'。$ id。''); 日志 -

    1错误INFO - 匹配的路由“customer”(参数:“_controller”:“GS OrderBundle Controller CustomerController :: indexAction”,“id”:“1784”,“_route”:“customer”)DEBUG-通知事件“ kernel.request“监听器”Symfony Component HttpKernel EventListener DebugHandlersListener :: configure“。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener ProfilerListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给侦听器“Symfony Component HttpKernel EventListener DumpListener :: configure”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Bundle FrameworkBundle EventListener SessionListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener FragmentListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener RouterListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener LocaleListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener TranslatorListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给侦听器“Symfony Component Security Http Firewall :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Bundle AsseticBundle EventListener RequestListener :: onKernelRequest”。 调试 - 通知事件“kernel.controller”监听器“Symfony Bundle FrameworkBundle DataCollector RouterDataCollector :: onKernelController”。 DEBUG - 通知事件“kernel.controller”给侦听器“Acme DemoBundle EventListener ControllerListener :: onKernelController”。 DEBUG - 通知事件“kernel.controller”监听器“Symfony Component HttpKernel DataCollector RequestDataCollector :: onKernelController”。 DEBUG - 通知事件“kernel.controller”为侦听器“Sensio Bundle FrameworkExtraBundle EventListener ControllerListener :: onKernelController”。 DEBUG - 通知事件“kernel.controller”以监听器“Sensio Bundle FrameworkExtraBundle EventListener ParamConverterListener :: onKernelController”。 DEBUG - 通知事件“kernel.controller”为侦听器“Sensio Bundle FrameworkExtraBundle EventListener HttpCacheListener :: onKernelController”。 调试 - 通知事件“kernel.controller”监听器“Sensio Bundle FrameworkExtraBundle EventListener SecurityListener :: onKernelController”。 DEBUG - 通知事件“kernel.controller”为侦听器“Sensio Bundle FrameworkExtraBundle EventListener TemplateListener :: onKernelController”。 CRITICAL - 未捕获的PHP异常Symfony Component Debug Exception UndefinedMethodException:“试图在类”GS OrderBundle Controller CustomerController“上调用方法”getDoctrine“。” 在C: xampp htdocs goodstuff src GS OrderBundle Controller CustomerController.php第13行调试 - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener DebugHandlersListener :: configure”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener ProfilerListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给侦听器“Symfony Component HttpKernel EventListener DumpListener :: configure”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Bundle FrameworkBundle EventListener SessionListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener FragmentListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener RouterListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener LocaleListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Component HttpKernel EventListener TranslatorListener :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给侦听器“Symfony Component Security Http Firewall :: onKernelRequest”。 DEBUG - 通知事件“kernel.request”给监听器“Symfony Bundle AsseticBundle EventListener RequestListener :: onKernelRequest”。 调试 - 通知事件“kernel.controller”监听器“Symfony Bundle FrameworkBundle DataCollector RouterDataCollector :: onKernelController”。 DEBUG - 通知事件“kernel.controller”给侦听器“Acme DemoBundle EventListener ControllerListener :: onKernelController”。 DEBUG - 通知事件“kernel.controller”监听器“Symfony Component HttpKernel DataCollector RequestDataCollector :: onKernelController”。 DEBUG - 通知事件“kernel.controller”为侦听器“Sensio Bundle FrameworkExtraBundle EventListener ControllerListener :: onKernelController”。 DEBUG - 通知事件“kernel.controller”以监听器“Sensio Bundle FrameworkExtraBundle EventListener ParamConverterListener :: onKernelController”。 DEBUG - 通知事件“kernel.controller”为侦听器“Sensio Bundle FrameworkExtraBundle EventListener HttpCacheListener :: onKernelController”。 调试 - 通知事件“kernel.controller”监听器“Sensio Bundle FrameworkExtraBundle EventListener SecurityListener :: onKernelController”。 DEBUG - 通知事件“kernel.controller”为侦听器“Sensio Bundle FrameworkExtraBundle EventListener TemplateListener :: onKernelController”。


    您需要扩展Symfony的Controller类以能够使用getDoctrine()方法。

    所以:

    use SymfonyBundleFrameworkBundleControllerController;
    
    class CustomerController extends Controller
    {
    
        public function indexAction($id)
        {
                $customer = $this->getDoctrine()->getRepository('GSOrderBundle:Customer')->find($id);
                   return new Response(
                '<html><body>Number: '.$id.'</body></html>'
            );
        }
    }
    

    (您也可以将控制器定义为服务,但这是更复杂的解决方案)

    链接地址: http://www.djcxy.com/p/53997.html

    上一篇: Attempted to call method "getDoctrine" on class (Symfony)

    下一篇: How to include bundle correctly?