尝试在类(Symfony)上调​​用方法"getDoctrine"

use*_*960 4 php mysql doctrine symfony doctrine-orm

我正在尝试使用symfony/doctrine创建一个小应用程序来读取表中的记录.我的步骤:

  1. 创建控制器(GS\OrderBunndle\Controller\CustomerCuntroller.php),路由.测试网址 - 它正在运行;
  2. 使用列和getter/setter为customer表(GS\OrderBundle\Entity\Customer.php)创建实体;

3)创建了GS\OrderBundle\Entity\CustomerRepository.php(我不知道为什么我还需要它,它是自动生成的).源代码:

namespace GS\OrderBundle\Entity;

use Doctrine\ORM\EntityRepository;

class CustomerRepository extends EntityRepository
{
}
Run Code Online (Sandbox Code Playgroud)

4)修改了CustomerController.php:

<?php

namespace GS\OrderBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
use GS\OrderBundle\Entity\Customer;
use Doctrine\ORM\EntityManager; 

class CustomerController 
{

    public function indexAction($id)
    {
            $customer = $this->getDoctrine()->getRepository('GSOrderBundle:Customer')->find($id);
               return new Response(
            '<html><body>Number: '.$id.'</body></html>'
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

尝试在类"GS\OrderBundle\Controller\CustomerController"上调用方法"getDoctrine".

500内部服务器错误 - UndefinedMethodException

堆栈跟踪

在第13行的src/GS/OrderBundle/Controller/CustomerController.php中 - 公共函数indexAction($ id){$ customer = $ this-> getDoctrine() - > getRepository('GSOrderBundle:Customer') - > find($ id ); 返回新的响应('Number:'.$ id.''); 日志 -

1错误信息 - 匹配的路线"customer"(参数:"_ control":"GS\OrderBundle\Controller\CustomerController :: indexAction","id":"1784","_ lute":"customer")DEBUG - 通知事件" kernel.request"to listener"Symfony\Component\HttpKernel\EventListener\DebugHandlersListener :: configure".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\ProfilerListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\DumpListener :: configure"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Bundle\FrameworkBundle\EventListener\SessionListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\FragmentListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\RouterListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\LocaleListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\TranslatorListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\Security\Http\Firewall :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Bundle\AsseticBundle\EventListener\RequestListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector :: onKernelController"的通知事件"kernel.controller".DEBUG - 监听器"Acme\DemoBundle\EventListener\ControllerListener :: onKernelController"的通知事件"kernel.controller".DEBUG - 监听器"Symfony\Component\HttpKernel\DataCollector\RequestDataCollector :: onKernelController"的通知事件"kernel.controller".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".DEBUG - 监听器"Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener :: onKernelController"的通知事件"kernel.controller".DEBUG - 监听器"Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener :: onKernelController"的通知事件"kernel.controller".CRITICAL - 未捕获的PHP异常Symfony\Component\Debug\Exception\UndefinedMethodException:"在类"GS\OrderBundle\Controller\CustomerController"上尝试调用方法"getDoctrine"." 在C:\ xampp\htdocs\goodstuff\src\GS\OrderBundle\Controller\CustomerController.php第13行DEBUG - 通知事件"kernel.request"到监听器"Symfony\Component\HttpKernel\EventListener\DebugHandlersListener :: configure".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\ProfilerListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\DumpListener :: configure"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Bundle\FrameworkBundle\EventListener\SessionListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\FragmentListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\RouterListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\LocaleListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\HttpKernel\EventListener\TranslatorListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Component\Security\Http\Firewall :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Bundle\AsseticBundle\EventListener\RequestListener :: onKernelRequest"的通知事件"kernel.request".DEBUG - 监听器"Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector :: onKernelController"的通知事件"kernel.controller".DEBUG - 监听器"Acme\DemoBundle\EventListener\ControllerListener :: onKernelController"的通知事件"kernel.controller".DEBUG - 监听器"Symfony\Component\HttpKernel\DataCollector\RequestDataCollector :: onKernelController"的通知事件"kernel.controller".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".DEBUG - 监听器"Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener :: onKernelController"的通知事件"kernel.controller".DEBUG - 监听器"Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener :: onKernelController"的通知事件"kernel.controller".

Tom*_*ski 8

您需要扩展Symfony的Controller类才能使用getDoctrine()方法.

所以:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

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>'
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

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