试图在 class 上调用方法 "getDoctrine" (Symfony)
Attempted to call method "getDoctrine" on class (Symfony)
我正在尝试创建小型应用程序以使用 symfony/doctrine 通过 ID 从 table 中读取记录。
我的步数:
- 已创建控制器
(GS\OrderBunndle\Controller\CustomerCuntroller.php), 路线。测试
URL - 正在运行;
- 为客户创建实体table
(GS\OrderBundle\Entity\Customer.php) 列和
getters/setters;
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>'
);
}
}
并出现以下错误:
Attempted to call method "getDoctrine" on class
"GS\OrderBundle\Controller\CustomerController".
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":
"GS\OrderBundle\Controller\CustomerController::indexAction", "id":
"1784", "_route": "customer") DEBUG - Notified event "kernel.request"
to listener
"Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\DumpListener::configure".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\Security\Http\Firewall::onKernelRequest". DEBUG -
Notified event "kernel.request" to listener
"Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
DEBUG - Notified event "kernel.controller" to listener
"Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Acme\DemoBundle\EventListener\ControllerListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
CRITICAL - Uncaught PHP Exception
Symfony\Component\Debug\Exception\UndefinedMethodException: "Attempted
to call method "getDoctrine" on class
"GS\OrderBundle\Controller\CustomerController"." at
C:\xampp\htdocs\goodstuff\src\GS\OrderBundle\Controller\CustomerController.php
line 13 DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\DumpListener::configure".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener
"Symfony\Component\Security\Http\Firewall::onKernelRequest". DEBUG -
Notified event "kernel.request" to listener
"Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
DEBUG - Notified event "kernel.controller" to listener
"Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Acme\DemoBundle\EventListener\ControllerListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController".
DEBUG - Notified event "kernel.controller" to listener
"Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
您需要扩展 Symfony 的 Controller
class 才能使用 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 但这是更复杂的解决方案)
我正在尝试创建小型应用程序以使用 symfony/doctrine 通过 ID 从 table 中读取记录。 我的步数:
- 已创建控制器 (GS\OrderBunndle\Controller\CustomerCuntroller.php), 路线。测试 URL - 正在运行;
- 为客户创建实体table (GS\OrderBundle\Entity\Customer.php) 列和 getters/setters;
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>'
);
}
}
并出现以下错误:
Attempted to call method "getDoctrine" on class "GS\OrderBundle\Controller\CustomerController".
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": "GS\OrderBundle\Controller\CustomerController::indexAction", "id": "1784", "_route": "customer") DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DumpListener::configure". DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest". DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Acme\DemoBundle\EventListener\ControllerListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController". CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\UndefinedMethodException: "Attempted to call method "getDoctrine" on class "GS\OrderBundle\Controller\CustomerController"." at C:\xampp\htdocs\goodstuff\src\GS\OrderBundle\Controller\CustomerController.php line 13 DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\DumpListener::configure". DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\FragmentListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\TranslatorListener::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest". DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest". DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Acme\DemoBundle\EventListener\ControllerListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ControllerListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\ParamConverterListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\HttpCacheListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\SecurityListener::onKernelController". DEBUG - Notified event "kernel.controller" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelController".
您需要扩展 Symfony 的 Controller
class 才能使用 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 但这是更复杂的解决方案)