2014-09-17 3 views
0

저는 ZF2에서 세션을 사용하는 방법에 익숙합니다.ZF2 : 세션 관리를 서비스에 주입하기

 $user_session = new Container('user'); 
     $user_session->username = 'JohnDoe'; 

이 괜찮지 만 내 비즈니스 로직 서비스 중 하나에 세션 데이터를 유지하기 위해 노력하고있어 만약 내가 강력하게이 의사처럼, 내 서비스의 생성자에 세션 관리 객체/서비스를 주입하는 것을 선호 것 :

프레임 워크가이 기능을 제공한다고 생각하지만 어디서나 찾을 수는 없습니다. 나는 항상 내 자신을 쓸 수 있었지만 바퀴를 재발 명하고 싶지 않았습니다.

+1

당신이 무슨 뜻인지 확신하지; 이름이 간격을 두어 세션 컨테이너가 * 세션 * 서비스 인 경우 다른 클래스를 래핑 할 필요가 없습니다. 즉, 추가하거나 컨테이너에서 임의로 제거 할 수 있습니다. 만약 당신이 각 컨테이너에 대한 팩토리를 생성한다면, 당신은 다른 서비스에 그것을 주입함으로써 각각을 재사용 할 수 있습니다. (예를 들어'$ sessionSvc'는'Zend \ Session \ Container'의 인스턴스가 될 것입니다.) 세션 처리를 전역 적으로 관리하려면 ['Zend \ Session \ SessionManager']을 확인하십시오 (https://github.com/zendframework/zf2/blob/master/library/Zend/Session/SessionManager.php) – AlexP

+1

흠, 아마 당신 말이 맞아요. 내 Module.php에서 Container를 인스턴스화하고이를 서비스 생성자에 전달할 수 있습니다. 나는 내가 생각하는 나무로 숲을 놓쳤다. – AlexMA

답변

2

대답은 내가 깨달은 것보다 훨씬 간단했습니다. 일단 인스턴스화되면 컨테이너 인스턴스 자체를 비즈니스 서비스에 삽입하여 세션에 대한 액세스 권한을 제공 할 수 있습니다. 나중에 서비스를 테스트하기 위해 phpunit을 사용하는 경우 객체는 ArrayObject 또는 ArrayObject의 인스턴스로 조롱 될 수 있습니다.

Module.php의 getServiceConfig 방법에

:

'MyModule\Service\BusinessService' => function($sm) { 
     // Container doesn't need to use this name but it seems sensible. 
     $container = new Container('MyModule\Service\BusinessService'); 
     return new Service\BusinessService($container); 
}, 
관련 문제