Zend Framework 2 のモジュール内でサービスを定義する場合は、'service_manager'キーに定義を記載します。 (一般的には config/module.config.php )
サービスの生成定義を記載するときに短い方法は、factoriesにクロージャーを設定することです。 サービスを取得するときにクロージャーは実行されます。 このようにしてサービスを遅延して作成することができます。
<?php
return array(
'service_manager' => array(
'factories' => array(
'foo' => function($sm) {
return new Service();
}
),
),
);
また、クロージャ以外でもZend\ServiceManager\FactoryInterfaceを実装したものを用意し、
factoriesにクラス名を記載すればそのFactory経由でサービスが取得されます。
<?php
array(
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
),
),
)
そして、サービスを取得するためには次のように書きます。
$this->getServiceLocator()->get('foo'); // コントローラ内の場合
デフォルトでは、サービスは共有されます。共有化を止めたい場合は、sharedに同一キー名のサービス名を用意し、falseを設定します。
<?php
return array(
'service_manager' => array(
'factories' => array(
'foo' => function($sm) {
return new Service();
}
),
'shared' => array(
'foo' => false
),
),
);
参考:Zend\ServiceManager Quick Start
http://packages.zendframework.com/docs/latest/manual/en/modules/zend.service.manager.quick.start.html
参考:http://silex-users-jp.phper.jp/doc/html/services.html#service-definitions