Class Symfony2依赖项注入/服务容器

Class Symfony2依赖项注入/服务容器,class,symfony,service,dependency-injection,Class,Symfony,Service,Dependency Injection,我对Symfony2很陌生,已经建立了一个定制的CMS,它有不同的部分,如用户管理、页面管理、图像库等。我想记录CMS中的所有活动,因此我认为最好创建一个集中的类来存储活动,以便我可以从任何部分调用它 我一直在研究依赖注入和服务容器,但很难找出两者的区别是什么?如果有的话 我已设置了以下服务,但希望得到有关这是否是最佳方法的反馈: # app/config/config.yml # AdminLog Configuration services: admin_log: c

我对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();
    }

}
  • 这是最好的方法吗
  • 该类是否应该像我所做的那样位于捆绑包中的“服务”目录中
  • DependencyInjection文件夹用于什么

  • 谢谢

    依赖项Inction意味着将对象传递到类中,而不是在类中初始化它。服务容器是帮助您管理所有这些服务(具有依赖关系的类)的类

    你的问题:

    这是最好的方法吗

    是,除了名称空间

    该类是否应该像我所做的那样位于捆绑包中的“服务”目录中

    不,它可以存在于任何名称空间中。您应该将它放在逻辑名称空间中,例如
    MyBundle\Logger

    DependencyInjection文件夹用于什么


    它适用于三种类型的类:
    扩展
    配置
    和编译器过程。

    服务只是放在服务容器中的普通类别。所以你们应该把它当作普通类来处理,所以你们应该把它们放在一个描述性的名称空间里好的,你们能给我一个例子来确认一下吗?xyz\Bundle\CoreBundle\Logger是否合适?抱歉,还有一件事。你怎么称呼这个班?只是管理员?管理员记录器?管理员日志记录器?实体类已采用AdminLog。因为您位于命名空间中,所以只能使用AdminLog。我会称之为管理员将类传递到类中。。否,将对象传递到对象:-)如果没有容器,您不能拥有DI?那完全是胡说八道!你从哪里得到这些信息?
    $this->get('admin_log')->logActivity('Website', 'index', 'Test', 'Note here...');