LoginSignup
5

More than 5 years have passed since last update.

Zend Framework 2 サービスの定義 によるオブジェクトの管理 (導入)

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5