Attempted to call method "getDoctrine" on class (Symfony)

I am trying to create small application to read the record from the table by id using symfony/doctrine. My steps:

  • Created controller (GSOrderBunndleControllerCustomerCuntroller.php), route. Testing URL - it is working;
  • Creating Entity for customer table (GSOrderBundleEntityCustomer.php) with columns and getters/setters;
  • 3) Created GSOrderBundleEntityCustomerRepository.php (I am not sure why do I need it yet, it was automatically generated). Source code:

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

    4) Modified 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>'
            );
        }
    }
    

    And getting following error:

    Attempted to call method "getDoctrine" on class "GSOrderBundleControllerCustomerController".

    500 Internal Server Error - UndefinedMethodException

    Stack Trace

    in src/GS/OrderBundle/Controller/CustomerController.php at line 13 - public function indexAction($id) { $customer = $this->getDoctrine()->getRepository('GSOrderBundle:Customer')->find($id); return new Response( 'Number: '.$id.'' ); Logs -

    1 error INFO - Matched route "customer" (parameters: "_controller": "GSOrderBundleControllerCustomerController::indexAction", "id": "1784", "_route": "customer") DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerDebugHandlersListener::configure". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerProfilerListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerDumpListener::configure". DEBUG - Notified event "kernel.request" to listener "SymfonyBundleFrameworkBundleEventListenerSessionListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerFragmentListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerRouterListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerLocaleListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerTranslatorListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentSecurityHttpFirewall::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyBundleAsseticBundleEventListenerRequestListener::onKernelRequest". DEBUG - Notified event "kernel.controller" to listener "SymfonyBundleFrameworkBundleDataCollectorRouterDataCollector::onKernelController". DEBUG - Notified event "kernel.controller" to listener "AcmeDemoBundleEventListenerControllerListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SymfonyComponentHttpKernelDataCollectorRequestDataCollector::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerControllerListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerParamConverterListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerHttpCacheListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerSecurityListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerTemplateListener::onKernelController". CRITICAL - Uncaught PHP Exception SymfonyComponentDebugExceptionUndefinedMethodException: "Attempted to call method "getDoctrine" on class "GSOrderBundleControllerCustomerController"." at C:xampphtdocsgoodstuffsrcGSOrderBundleControllerCustomerController.php line 13 DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerDebugHandlersListener::configure". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerProfilerListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerDumpListener::configure". DEBUG - Notified event "kernel.request" to listener "SymfonyBundleFrameworkBundleEventListenerSessionListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerFragmentListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerRouterListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerLocaleListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentHttpKernelEventListenerTranslatorListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyComponentSecurityHttpFirewall::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "SymfonyBundleAsseticBundleEventListenerRequestListener::onKernelRequest". DEBUG - Notified event "kernel.controller" to listener "SymfonyBundleFrameworkBundleDataCollectorRouterDataCollector::onKernelController". DEBUG - Notified event "kernel.controller" to listener "AcmeDemoBundleEventListenerControllerListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SymfonyComponentHttpKernelDataCollectorRequestDataCollector::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerControllerListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerParamConverterListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerHttpCacheListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerSecurityListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "SensioBundleFrameworkExtraBundleEventListenerTemplateListener::onKernelController".


    You need to extend Symfony's Controller class to be able to use getDoctrine() method.

    So:

    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>'
            );
        }
    }
    

    (you can also define controller as a service but this is more complex solution)

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

    上一篇: 通过AppKernel.php检测一个bundle symfony 2.5.6

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