尝试创建将信息记录到数据库的服务。该服务必须在构造函数中调用Doctrine \ ORM \ EntityManager,但我一直收到此错误:
Catchable Fatal Error: Argument 1 passed to AppBundle\Service\EmailLoggerManager::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /Users/augustwhitlock/Desktop/symfony/SymfonyRepositories/forms/src/AppBundle/Controller/DefaultController.php on line 45 and defined
以下是我在服务文件中的内容
namespace AppBundle\Service;
use Doctrine\ORM\EntityManager;
use AppBundle\Entity\Logger;
class EmailLoggerManager
{
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function logMessageToDatabase($type, $message, $date)
{
$logger = new Logger();
$logger->setMessageType = $type;
$logger->setMessageText = $message;
$logger->setMessageDate = $date;
$this->em->persist($logger);
$this->em->flush();
}
这就是我如何处理EntityManager的注入。
app.email_logger_manager:
class: AppBundle\Services\EmailLoggerManager
arguments: ['@doctrine.orm.entity_manager']
此时我只是在学习服务并尝试不同的事情。但这并不想工作。
这是DefaultController的编辑。我添加了第45和46行。除了类定义之外,没有任何内容。
$emailLoggerManager = new EmailLoggerManager();
$emailLoggerManager->logMessageToDatabase('Info', 'Hiya', new \DateTime());
return new Response('Message Logged');
该类背后的整个概念是在服务中使用doctrine来将事物记录到数据库中,从而使我的控制器不必被所有代码堵塞。
答案 0 :(得分:0)
您应该按照以下方式从控制器调用服务:
$this->get('app.email_logger_manager')
->logMessageToDatabase('Info', 'Hiya', new \DateTime());
而不是直接在控制器中实例化类。
此外,建议传递“@doctrine”服务而不是@ doctrine.orm.entity_manager,因为EntityManager可能会被关闭。 构造函数必须接收Doctrine \ Bundle \ DoctrineBundle \ Registry而不是Doctrine \ ORM \ EntityManager