저는 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...');
- 이것이 가장 좋은 방법입니까?
- 내가했던 것처럼 클래스가 '서비스'디렉토리 안에 있어야합니까?
- DependencyInjection 폴더 란 무엇입니까?
감사 종속성 Inction가 대신 클래스를 초기화하는 클래스로 객체를 전달한다는 것을 의미
서비스는 서비스 컨테이너에 저장되는 정상적인 서비스입니다. 그래서 당신은 그냥 정상적인 클래스로 처리해야하므로 설명적인 네임 스페이스에 넣어 야합니다. –
OK 확인해 볼 수 있습니까? xyz \ Bundle \ CoreBundle \ Logger가 적절합니까? – user1961082
네, 저도 맘에 들어요. –