It's raining cats and dogs.

無駄なことなんてないはず

slim 2.4からroutingでクラス形式のコントローラーを呼び出せるようになっていたらしい

slim 2.4からroutingでクラス形式のコントローラーを呼び出せるようになっていたらしい。

http://uzulla.hateblo.jp/entry/2014/01/11/040335

なるほどと思って、早速試したらできたので、おおーとなっていたのだけど、

上の例は特にパラメータを渡さない呼び出しだったので、パラメータを渡すときはどうするのかというと

  • routing
<?php
$app->get('/:greeting/:name', '\App\Controller\HelloController:index');
  • controller
<?php
namespace App\Controller;

class HelloController
{
    public function index($param1, $param2)
    {
        var_dump($param1, $param2);
    }
}

みたいな感じで取れるらしい。

ところで、これくらいシンプルなコントローラーだったら別に構わないのだけど、コンテナとして使っている$appはどうしてもコントローラで参照したいところなので、なんとか上手い渡し方ができないか調べた。結論としては良いやり方がないっぽい。

例えばこんな感じにできたらいいなーとなんとなく思った。

<?php

namespace App\Controller;

class HelloController
{
    private $app;
    public function __construct($app)
    {
        $this->app = $app;
    }
    public function index($param1, $param2)
    {
        var_dump($param1, $param2);
    }
}

調べていたら、おんなじようなことを考える人はいるもので、既にPR送っている人がいた。

https://github.com/codeguy/Slim/pull/755

このPRの結論としてはslim3に持ち越しとのことで、切ない感じになりました。slim3いつ出るの...