我是Symfony2的新手,并且已经构建了一个自定义CMS,其中包含用户管理,页面管理,图像库等各个部分。我想记录CMS中的所有活动,因此认为最好创建一个集中的类来存储活动,以便我可以从任何部分调用它。
我一直关注依赖注入和服务容器,但很难弄清楚区别是什么?如果有的话?
我已经设置了以下服务,但如果这是最好的方法,我希望得到反馈:
# app/config/config.yml
# AdminLog Configuration
services:
admin_log:
class: xyz\Bundle\CoreBundle\Service\AdminLogService
arguments: [@doctrine.orm.entity_manager]
以下是我的课程:
<?php
namespace xyz\Bundle\CoreBundle\Service;
use xyz\Bundle\CoreBundle\Entity\AdminLog;
class AdminLogService
{
protected $em;
public function __construct(\Doctrine\ORM\EntityManager $em)
{
$this->em = $em;
}
public function logActivity($controller, $action, $entityName, $note)
{
$adminLog = new AdminLog(
1,
$controller,
$action,
$entityName,
$note
);
$this->em->persist($adminLog);
$this->em->flush();
}
}
然后,我将使用以下内容从CMS中的任何控制器调用此方法:
$this->get('admin_log')->logActivity('Website', 'index', 'Test', 'Note here...');
由于
答案 0 :(得分:3)
依赖关系意味着您将对象传递给类,而不是在类中初始化它。 Service Container是一个可以帮助您管理所有这些服务(具有依赖项的类)的类。
您的问题:
这是最好的方法吗?
是的,除了名称空间。
该类是否应该像我一样在捆绑包内的“服务”目录中?
不,它可以存在于任何命名空间中。您应该将其放在逻辑命名空间中,例如MyBundle\Logger
。
什么是DependencyInjection文件夹?
它适用于3种类型:Extension
,Configuration
和编译器传递。