slimでpimpleを使う
pimpleはphpでDIコンテナを実現するためのライブラリです。
今回は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行目で実際に使われるタイミングで生成されます。