2
:. 서비스 컨테이너에서 심포니 서비스와 같은 고유 한 인스턴스는 말한다 심포니 문서에서
"
이 모든 서비스는 기본적으로 공유됩니다 이것은 당신이 서비스를 검색 할 때마다, 당신은 동일한 인스턴스를 얻을 수 있습니다 것을 의미한다. 이것은 대개 원하는 동작이지만 경우에 따라 항상 새 인스턴스를 가져 오려고 할 수 있습니다. " 내가 다른 컨트롤러에서 변수$notification
을 좀하고 싶습니다
class ServerCommand extends ContainerAwareCommand {
public $notification;
/**
* Configure a new Command Line
*/
protected function configure()
{
$this->setName('Project:notification:server') ->setDescription('Start the notification server.');
}
public function getNotification()
{
return $this->notification;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->notification = new Notification();
$server = IoServer::factory(new HttpServer(
new WsServer(
$this->notification
)
), 8081);
$server->loop->addPeriodicTimer(1, function() {
$this->notification->sendToAll('Hello');
});
$server->run();
}
}
:
이
이 클래스 인 services.ymlservices:
project.notification:
class: NotificationsBundle\Command\ServerCommand
입니다. 내가 할 때 "존재하지 않는 객체"($ 알림) 오류가 발생했습니다.
PHP 응용 프로그램/콘솔 프로젝트 : 알림 :
내가 다음 명령을 실행하여 서비스를 실행하는 문서에서 서버
을 내가 동일한 인스턴스 서비스 있지만 모든를 얻을 수 있습니다 말한다 실행 시간 :
$this->container->get('Project.notification')->notification
나는 비 객체 오류가 발생했습니다. 즉, 처음 서비스를 실행했을 때 생성 한 객체 $notification
을 잃어 버렸습니다. 다른 컨트롤러에서 메시지를 보내야하기 때문에 컬렉션 사용자 목록에 액세스해야합니다 (객체 $ 알림 안에 있습니다).
아이디어가 있으십니까?
을 이것은 서비스가 호출간에 지속 (저장)되는 것을 의미하지는 않으며 호출 당이 서비스의 인스턴스가 하나만 생성된다는 것을 의미합니다. 그래서 당신은 신선한 것을 얻습니다. – Mitchel
그래서 영구적 인 서비스를 어떻게 설정할 수 있습니까? – Minniek
데이터를 데이터베이스 또는 세션에 저장하여이를 수행 할 수 있습니다. '무기한으로'PHP 인터프리터를 실행하지 않는 한 영구적 인 서비스를 가질 수 없습니다. 그래서 getNotification() 메소드가 이미 통지가 있는지 확인하고, 통지가없는 경우 get/load one을 호출하여 리턴 할 수 있습니다. – Mitchel