読者です 読者をやめる 読者になる 読者になる

slimでpimpleを使う

pimpleはphpDIコンテナを実現するためのライブラリです。
今回はslimでpimpleを使ってみます。

インストール

composer.jsonにpimpleを追加

$ vi composer.json
"require": {
    "slim/slim": "2.*",
    "slim/extras": "2.0.*",
    "twig/twig": "1.*",
    "pimple/pimple": "1.0.0"
$ php composer.phar update

index.phpを編集

32~45行目でNameServiceを定義
19~23行目でNameServiceをpimpleに登録
26行目でNameServiceをpimpleから利用してます。

$ vi web/index.php
 10 $app = new Slim(array(
 ~略~
 19 $container = new Pimple();
 20 $container['app'] = $app;
 21 $container['NameService'] = $container->share(function ($container) {
 22     return new NameService($container);
 23 });
 25 $app->get('/', function() use ($container) {
 26     $name = $container['NameService']->getName();
 27     $container['app']->render('index.html.twig', array('name' => $name));
 28   });
 29
 30 $app->run();
 32
 33 class NameService
 34 {
 35     protected $di;
 36     public function __construct(Pimple $di)
 37     {
 38         $this->di = $di;
 39     }
 41     public function getName()
 42     {
 43         return 'taka512';
 44     }
 45 }


pimpleの何が嬉しいかというとLazyロードなのでNameServiceは26行目で実際に使われるタイミングで生成されます。