Symfony ContextErrorException:可捕获致命错误:传递给_construct()的参数1必须是Doctrine\ORM\EntityManager的实例,未给出任何实例
我在自定义类中插入条令服务时遇到了一个问题。 我正在使用symfony 2.3。我已经尽了全力,但仍然无法找到问题所在和缺失之处。 以下是我的代码: config.ymlSymfony ContextErrorException:可捕获致命错误:传递给_construct()的参数1必须是Doctrine\ORM\EntityManager的实例,未给出任何实例,symfony,dependency-injection,Symfony,Dependency Injection,我在自定义类中插入条令服务时遇到了一个问题。 我正在使用symfony 2.3。我已经尽了全力,但仍然无法找到问题所在和缺失之处。 以下是我的代码: config.yml imports: - { resource: parameters.yml } - { resource: security.yml } - { resource: "@ClCommonBundle/Resources/config/services.yml" } namespace Cl\AdminBun
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: "@ClCommonBundle/Resources/config/services.yml" }
namespace Cl\AdminBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Cl\CommonBundle\Form\CityType;
use Cl\CommonBundle\Entity\City;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Cl\CommonBundle\Helpers\pager;
class CityController extends Controller {
public function listAction(Request $request, $trigger = "next", $page = 1, $country, $cityname, $isactive) {
$pager = new pager();
}
}?>
服务。yml:
parameters:
cl.pager.class: Cl\CommonBundle\Helpers\Pager
services:
cl.pager:
class: cl\CommonBundle\Helpers\Pager
arguments: ["@doctrine.orm.entity_manager"]
<?php
namespace Cl\CommonBundle\Helpers;
use Cl\CommonBundle\Helpers\pagerInterface;
use Doctrine\ORM\EntityManager;
/**
* Description of pagination
*/
class pager implements pagerInterface {
protected $em;
public function __construct(EntityManager $em) {
$this->em = $em;
}
public function getTotalRows($params) {
return $this->em->getRepository($params['repository'])->getActiveRowsCount($params);
}
}?>
namespace Cl\AdminBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Cl\CommonBundle\Form\CityType;
use Cl\CommonBundle\Entity\City;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Cl\CommonBundle\Helpers\pager;
class CityController extends Controller {
public function listAction(Request $request, $trigger = "next", $page = 1, $country, $cityname, $isactive) {
$pager = new pager();
}
}?>
pagerinterface.php
<?php
namespace Cl\CommonBundle\Helpers;
interface pagerInterface {
public function getTotalRows($params);
}?>
namespace Cl\AdminBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Cl\CommonBundle\Form\CityType;
use Cl\CommonBundle\Entity\City;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Cl\CommonBundle\Helpers\pager;
class CityController extends Controller {
public function listAction(Request $request, $trigger = "next", $page = 1, $country, $cityname, $isactive) {
$pager = new pager();
}
}?>
错误
namespace Cl\AdminBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Cl\CommonBundle\Form\CityType;
use Cl\CommonBundle\Entity\City;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Cl\CommonBundle\Helpers\pager;
class CityController extends Controller {
public function listAction(Request $request, $trigger = "next", $page = 1, $country, $cityname, $isactive) {
$pager = new pager();
}
}?>
Whoops, looks like something went wrong.
1/1 ContextErrorException: Catchable Fatal Error: Argument 1 passed to Cl\CommonBundle\Helpers\pager::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /opt/lampp/htdocs/Cl/src/Cl/AdminBundle/Controller/CityController.php on line 117 and defined in /opt/lampp/htdocs/Cl/src/Cl/CommonBundle/Helpers/pager.php line 17
in /opt/lampp/htdocs/Cl/src/Cl/CommonBundle/Helpers/pager.php line 17
at ErrorHandler->handle('4096', 'Argument 1 passed to Cl\CommonBundle\Helpers\pager::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /opt/lampp/htdocs/Cl/src/Cl/AdminBundle/Controller/CityController.php on line 117 and defined', '/opt/lampp/htdocs/Cl/src/Cl/CommonBundle/Helpers/pager.php', '17', array()) in /opt/lampp/htdocs/Cl/src/Cl/CommonBundle/Helpers/pager.php line 17
at pager->__construct() in /opt/lampp/htdocs/Cl/src/Cl/AdminBundle/Controller/CityController.php line 117
at CityController->listAction(object(Request), 'next', '4', 'all', 'all', 'all')
at call_user_func_array(array(object(CityController), 'listAction'), array(object(Request), 'next', '4', 'all', 'all', 'all')) in /opt/lampp/htdocs/Cl/app/bootstrap.php.cache line 2889
at HttpKernel->handleRaw(object(Request), '1') in /opt/lampp/htdocs/Cl/app/bootstrap.php.cache line 2863
at HttpKernel->handle(object(Request), '1', true) in /opt/lampp/htdocs/Cl/app/bootstrap.php.cache line 2992
at ContainerAwareHttpKernel->handle(object(Request), '1', true) in /opt/lampp/htdocs/Cl/app/bootstrap.php.cache line 2272
at Kernel->handle(object(Request)) in /opt/lampp/htdocs/Cl/web/app_dev.php line 29
Stack Trace
in /opt/lampp/htdocs/Cl/vendor/symfony/symfony/src/Symfony/Component/Debug/ErrorHandler.php at line 162 -
}
});
throw new DummyException();
}
}
at ErrorHandler ->handle ('4096', 'Argument 1 passed to Cl\CommonBundle\Helpers\pager::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /opt/lampp/htdocs/Cl/src/Cl/AdminBundle/Controller/CityController.php on line 117 and defined', '/opt/lampp/htdocs/Cl/src/Cl/CommonBundle/Helpers/pager.php', '17', array())
in /opt/lampp/htdocs/Cl/src/Cl/CommonBundle/Helpers/pager.php at line 17 +
at pager ->__construct ()
in /opt/lampp/htdocs/Cl/src/Cl/AdminBundle/Controller/CityController.php at line 117 +
at CityController ->listAction (object(Request), 'next', '4', 'all', 'all', 'all')
at call_user_func_array (array(object(CityController), 'listAction'), array(object(Request), 'next', '4', 'all', 'all', 'all'))
in kernel.root_dir/bootstrap.php.cache at line 2889 +
at HttpKernel ->handleRaw (object(Request), '1')
in kernel.root_dir/bootstrap.php.cache at line 2863 +
at HttpKernel ->handle (object(Request), '1', true)
in kernel.root_dir/bootstrap.php.cache at line 2992 +
at ContainerAwareHttpKernel ->handle (object(Request), '1', true)
in kernel.root_dir/bootstrap.php.cache at line 2272 +
at Kernel ->handle (object(Request))
in /opt/lampp/htdocs/Cl/web/app_dev.php at line 29 +
Logs - 1 error
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
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".
INFO - Matched route "_admin_city_list" (parameters: "_controller": "Cl\AdminBundle\Controller\CityController::listAction", "trigger": "next", "page": "4", "country": "all", "cityname": "all", "isactive": "all", "_route": "_admin_city_list")
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
DEBUG - Read SecurityContext from the session
DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener::injectLogger".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener::injectLogger".
DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::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\TemplateListener::onKernelController".
DEBUG - Notified event "kernel.exception" to listener "Symfony\Component\Security\Http\Firewall\ExceptionListener::onKernelException".
DEBUG - Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelException".
DEBUG - Notified event "kernel.exception" to listener "Symfony\Component\HttpKernel\EventListener\ExceptionListener::onKernelException".
CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\DummyException: "" at /opt/lampp/htdocs/Cl/vendor/symfony/symfony/src/Symfony/Component/Debug/ErrorHandler.php line 162
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
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\Security\Http\Firewall::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener::onKernelRequest".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener::injectLogger".
DEBUG - Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener::injectLogger".
DEBUG - Notified event "kernel.controller" to listener "Symfony\Bundle\FrameworkBundle\DataCollector\RouterDataCollector::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\TemplateListener::onKernelController".
在控制器中,替换
$pager=new pager()代码>使用$pager=$this->get('cl.pager')代码>
这将调用服务容器
来加载您的服务,并将objectManager
注入构造函数您必须从容器中获取服务,而不是通过创建新实例
namespace Cl\AdminBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Cl\CommonBundle\Form\CityType;
use Cl\CommonBundle\Entity\City;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Cl\CommonBundle\Helpers\pager;
class CityController extends Controller {
public function listAction(Request $request, $trigger = "next", $page = 1, $country, $cityname, $isactive) {
$pager = $this->get('cl.pager'); //
}
}?>
问题在于您实例化和调用寻呼机助手的方式:
$pager = new pager();
您必须让容器创建寻呼机助手的一个实例,您必须创建一个扩展:
然后,您可以在控制器中调用您的助手,如下所示:
$this->get('cl.pager');
删除第三个导入表单config.yml让DI完成他的工作。好的,让我检查删除删除后没有区别。有三个人给了你正确的答案,你拒绝了他们。这可能是一种模式。new pager()与服务容器没有关系。这根本行不通。接受它,继续前进。塞拉德,我只是问我的困惑。我也很感激他们。我不知道你们为什么要批评我的评论,你们之前也有过同样的评论。谢谢ahmed,但这是在外部类中调用容器的一种方式。但symfony 2.3也提供了通过外部类中的构造函数调用entitymanager对象的方法。有很多网站提供相同的选择,但我没有成功。那么你能解释一下我该如何实现它吗。我试过了,我不明白你的问题。您必须让容器实例化寻呼机助手,然后必须从Sf容器调用此实例。基于您共享的代码,您试图创建一个新的寻呼机实例,但没有提供原则依赖,这是错误的。这里的要点是让我们知道您是否想将寻呼机助手定义为服务。谢谢Jamek,同样的评论和问题也会问Jamek您,这是在外部类中调用容器的一种方法。但symfony 2.3也提供了通过外部类中的构造函数调用entitymanager对象的方法。有很多网站提供相同的选择,但我没有成功。那么你能解释一下我该如何实现它吗。我试过洛特汉克斯·托马斯兹,我也向贾梅克和艾哈迈德问过同样的问题,所以请不要感到无聊,我需要澄清和解决方法来实施。这是在外部类中调用容器的一种方法。但symfony 2.3也提供了通过外部类中的构造函数调用entitymanager对象的方法。有很多网站提供相同的选择,但我没有成功。那么你能解释一下我该如何实现它吗。我试过了对不起,我不确定我是否理解你。问题是,当您将类定义为服务时,您需要将其用作服务。使用new
关键字提示类不是有效的方法。Symfony2使用服务容器来处理实例化服务,您应该询问您的答案,但我的意思是这是一个服务,但如果我想在同一个类中调用多个服务,该怎么办。您可以将多个服务作为参数传递给其他服务的构造函数,例如,您的寻呼机可以采用objectManager和session,为此,只需扩展参数
列表:参数:[“@doctrine.orm.entity_manager”,“@session”]