[英]Catchable Fatal Error: Argument 1 passed to Controller::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called
Notification controller 通知控制器
<?php
namespace Main\AdminBundle\Controller;
/* included related namespace */
use Symfony\Component\PropertyAccess\PropertyAccess;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Query;
use Main\AdminBundle\Entity\Notificationmaster;
class NotificationController extends BaseController
{
protected $session;
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
/**
* @Route("/Notification1/{salon_id}",defaults={"salon_id":""})
* @Template()
*/
public function indexAction($salon_id)
{
return array("j"=>"jj");
}
/**
* @Route("/Notification/create/{notification_type}/{notification_title}",defaults={"notification_type":"","notification_title":""})
*/
public function notificationcreateAction($notification_type,$notification_title)
{
//$this->em = $em;
$notificationmaster = new Notificationmaster();
$notificationmaster->setNotification_type($notification_type);
$notificationmaster->setNotification_title($notification_title);
$em = $this->getDoctrine()->getManager();
$em->persist($notificationmaster);
$em->flush();
return $notificationmaster->getNotification_master_id();
}
/**
* @Route("/Notification/List/{notification_for}/{notification_to}/{lang_id}",defaults={"notification_for":"","notification_to":"","lang_id":""})
*/
public function notificationlistAction($notification_for,$notification_to,$lang_id)
{
//$em = $this->getDoctrine()->getManager();
return new Response(json_encode("hi"));
}
}
in twig file 在树枝文件中
{% set notification_html = render(controller('MainAdminBundle:Notification:notificationlist',{"notification_for":"organization","notification_to":"1","lang_id":"1"})) %}
Base Controller 基本控制器
class BaseController extends Controller{
public function __construct()
{
date_default_timezone_set("Asia/Calcutta");
}
}
i got this error while im calling notification list action using Twig file( as above )
我在使用
Twig file( as above )
调用通知列表操作时收到了此错误Twig file( as above )
Catchable Fatal Error: Argument 1 passed to Controller::__construct() must be an instance of Doctrine\\ORM\\EntityManager, none given, called
可捕获的致命错误:传递给Controller :: __ construct()的参数1必须是Doctrine \\ ORM \\ EntityManager的实例,未给出任何实例,称为
if i remove entity manager , then i got an error in create action Like 如果我删除实体管理器,那么我在创建动作时会出错,例如
Error: Call to a member function has() on a non-object
错误:在非对象上调用成员函数has()
because i call this create action using this 因为我用这个叫这个创建动作
$notification = new NotificationController($em);
$notification_id = $notification->notificationcreateAction('appointment_book','New Appointment');
so i have to add entity manager . 所以我必须添加实体管理器。
First of, to address this particular error case. 首先,要解决这种特殊的错误情况。 If you question contains the whole NotificationController, there doesn't seem to be any need to define a constructor nor having the element manager stored in class variable - your notificationcreateAction fetches the entity manager instance from doctrine and doesn't use the class variable.
如果您的问题包含整个NotificationController,则似乎不需要定义构造函数, 也无需将元素管理器存储在类变量中-您的notificationcreateAction从学说中获取实体管理器实例,并且不使用类变量。 Ie just remove the constructor and class variable completely:
即只是完全删除构造函数和类变量:
class NotificationController extends BaseController
{
protected $session;
/**
* @Route("/Notification1/{salon_id}",defaults={"salon_id":""})
* @Template()
*/
public function indexAction($salon_id)
{
return array("j"=>"jj");
}
// and so forth...
And update your the code you use on your controller to: 并将您在控制器上使用的代码更新为:
$notification = new NotificationController();
$notification_id = $notification->notificationcreateAction('appointment_book','New Appointment');
To answer the question more generically 更笼统地回答这个问题
You shouldn't be instantiating controllers in different controllers. 您不应该在不同的控制器中实例化控制器。 Instead you should create a service for your common code that you can call from all of your controllers.
相反,您应该为可以从所有控制器调用的通用代码创建服务。 More about symfony services: Service Container
有关symfony服务的更多信息: Service Container
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.