uzullaがブログ

uzullaがブログです。

Slim が Class controllers 対応してた

苦しめられているウインドーズ案件、なんと今日は進捗1ミリくらいあったんだけど、多分1ミリすすんだ達成感を味わうヒマもなく、多分20メーターくらいモドされる罠があるんだろうなってPTSDになってるuzullaです、こんばんわ。

本題 Slim が 2.4.0 でクラスコントローラーに対応した

SlimはSinatraなどを参考にしたフレームワークなので(?)、以前までは

<?php
$app->get('/', function() use ($app){
    $app->render('index.html');
});

みたいなコードを書いて、ルート登録して無名関数を書いていた。
まあロジックは当然クラスメソッドとかにおいだしたいわけだけど、そうなると

<?php
$app->get('/', function() use ($app){
    (new \My\Controller\Page($app))->showIndex();
});
#または
$app->get('/', function() use ($app){
    $c = new \My\Controller\Page($app);
    $c->showIndex();
});

みたいなことやらないといけなかったので、ちょっとださいなーっておもってたんだけど、

<?php
$app->get('/', '\My\Controller\Page:showIndex');

とか一発でかけるようになってた、ヤダー便利〜〜(勿論前のも書ける)

本題終わり

ちょっと前にSlimでmultipartを送信すると、$app->post()がとれないことで結構くるしんでいてつらかったのだけれど(http://help.slimframework.com/discussions/questions/1234-why-slim-discard-content-type-in-slimhttpextract こんな質問を投げてしまう程度には)

「今の」Slimはphp://inputをつかってPOSTを受け取るみたいなコードになってて、PHPの仕様上php://inputはMultipartだとうけとれないから、うごかない。
いや、フォールバックコードはあるんだけど、なんか微妙なことになってて色々な抜けの結果、multipartだと値が受け取れない。つらくて夜も眠れない。
(具体的にはSlim\ExtraのCSRFDefenderがうごかないとか、テストでつかうMock向けのクライアントの実装が面倒だとか)


で、ふとおもってGithubのコードをみていたら、なんとdev-masterでは素直に$_POSTをつかうようになってた!?(;´Д`)

https://github.com/codeguy/Slim/commit/e73e93211a08700375a1e513d8de7d09a868bba9

マジかよ…ってこれ9月かよ…。2.4.0リリースは年末だったぞ…。

はやくリリースブランチにマージされないでしょうか…。こういうときせっつく方法はなにがよいのでしょうか…。

dev-masterつかうしかないのか…。

余談終わり

そんなPHPerの私が主催するPerlMongersの会、八王子でのエンジニア勉強会みたいな交流会みたいな、そんなHachioji.pm #37が1/25です、是非ご検討を。

http://atnd.org/events/47014
http://hachiojipm.org/