首页 文章

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

提问于
浏览
3

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

  • 创建控制器(GS \ OrderBunndle \ Controller \ CustomerCuntroller.php),路由 . 测试网址 - 它正在运行;

  • 使用列和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
{
}

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

并得到以下错误:

尝试在类“GS \ OrderBundle \ Controller \ CustomerController”上调用方法“getDoctrine” . 500内部服务器错误 - UndefinedMethodException第13行的src / GS / OrderBundle / Controller / CustomerController.php中的堆栈跟踪 - 公共函数indexAction($ id){$ customer = $ this-> getDoctrine() - > getRepository('GSOrderBundle:Customer “) - >查找($ ID);返回新的响应('Number:' . $ id . '');日志 - 1错误信息 - 匹配的路径“customer”(参数:“_ control”:“GS \ OrderBundle \ Controller \ CustomerController :: indexAction”,“id”:“1784”,“_ lute”:“customer”)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 - 通知事件“kernel.controller”到侦听器“Symfony \ Component \ HttpKernel \ DataCollector \ RequestDataCollector :: onKernelController” . DEBUG - 监听器“Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ ControllerListener :: onKernelController”的通知事件“kernel.controller” . DEBUG - 通知事件“kernel.controller”到侦听器“Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ ParamConverterListener :: onKernelController” . DEBUG - 监听器“Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ HttpCacheListener :: onKernelController”的通知事件“kernel.controller” . DEBUG - 通知事件“kernel.controller”到侦听器“Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ SecurityListener :: onKernelController” . 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” . 调查 - 通知事件“kernel.request”到监听器“Symfony \ Component \ Security \ Http \ Firewall :: onKernelRequest” . 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 - 通知事件“kernel.controller”到侦听器“Symfony \ Component \ HttpKernel \ DataCollector \ RequestDataCollector :: onKernelController” . DEBUG - 监听器“Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ ControllerListener :: onKernelController”的通知事件“kernel.controller” . DEBUG - 通知事件“kernel.controller”到侦听器“Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ ParamConverterListener :: onKernelController” . DEBUG - 监听器“Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ HttpCacheListener :: onKernelController”的通知事件“kernel.controller” . DEBUG - 通知事件“kernel.controller”到侦听器“Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ SecurityListener :: onKernelController” . DEBUG - 监听器“Sensio \ Bundle \ FrameworkExtraBundle \ EventListener \ TemplateListener :: onKernelController”的通知事件“kernel.controller” .

1 回答

  • 6

    您需要扩展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>'
            );
        }
    }
    

    (你也可以define controller as a service但这是更复杂的解决方案)

相关问题