2013-05-15 2 views
2

저는 Symfony2를 처음 접했고 사용자 관리, 페이지 관리, 이미지 라이브러리 등과 같은 다양한 섹션이있는 사용자 정의 CMS를 구축했습니다. CMS 내의 모든 활동을 기록하므로 생각했습니다. 모든 섹션에서 호출 할 수 있도록 활동을 저장하는 중앙 집중식 클래스를 만드는 것이 가장 좋습니다.Symfony2 의존성 주입/서비스 컨테이너

저는 의존성 주입 및 서비스 컨테이너를 살펴 보았지만 그 차이점을 파악하는 데 어려움이 있습니까? 만약에 어떠한?

내가 설정을 다음과 같은 서비스를했지만이 최선의 방법 인 경우에 대한 피드백을 부탁합니다 :

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

} 

은 그때 어떤 컨트롤러에서이를 호출합니다 : 아래

# app/config/config.yml 
# AdminLog Configuration 
services: 
    admin_log: 
     class:  xyz\Bundle\CoreBundle\Service\AdminLogService 
     arguments: [@doctrine.orm.entity_manager] 

내 클래스 CMS를 사용하여 내 다음

$this->get('admin_log')->logActivity('Website', 'index', 'Test', 'Note here...'); 
  1. 이것이 가장 좋은 방법입니까?
  2. 내가했던 것처럼 클래스가 '서비스'디렉토리 안에 있어야합니까?
  3. DependencyInjection 폴더 란 무엇입니까?

감사 종속성 Inction가 대신 클래스를 초기화하는 클래스로 객체를 전달한다는 것을 의미

답변

3

. 서비스 컨테이너는 이러한 모든 서비스 (종속성이있는 클래스)를 관리하는 데 도움이되는 클래스입니다.

질문 :

이 최선의 방법인가?

예 (네임 스페이스 제외).

클래스가 내가 수행 한 것처럼 '서비스'디렉토리 안에 있어야합니까?

아니요, 모든 네임 스페이스에있을 수 있습니다. 논리 이름 공간에 넣어야합니다 (예 : MyBundle\Logger).

DependencyInjection 폴더 란 무엇입니까?

Extension, Configuration 및 컴파일러가 전달하는 3 가지 유형의 클래스를 의미합니다.

+0

서비스는 서비스 컨테이너에 저장되는 정상적인 서비스입니다. 그래서 당신은 그냥 정상적인 클래스로 처리해야하므로 설명적인 네임 스페이스에 넣어 야합니다. –

+0

OK 확인해 볼 수 있습니까? xyz \ Bundle \ CoreBundle \ Logger가 적절합니까? – user1961082

+0

네, 저도 맘에 들어요. –

관련 문제