StackPHPというのが正式名称なのかわからないけど。
ひな形
- HttpKernelInterfaceを実装した$appを準備する。
- スタックを作る。
- $stack->resolve($app);
- $appを実行する
<?php $app = ...; // 1. $stack = (new Stack\Builder()) // 2. ->push(...) ->push(...); $app = $stack->resolve($app); // 3. // 4. $request = Request::createFromGlobals(); $response = $app->handle($request)->send(); $app->terminate($request, $response);
Hello, world
1のHttpKernelInterfaceを実装は、SymfonyやLaravelのアプリケーションでも良いのだけれど、
より簡単に作るためにstack/callable-http-kernel
というのが用意されている。
また、4の部分を簡単に書くために、stack/run
というのが用意されているので一緒にインストールしておく。
$ php composer.phar require stack/builder stack/callable-http-kernel stack/run
ちなみに最近、composer requireでバージョンを指定しなくても良くなったらしい。
<?php // index.php require "vendor/autoload.php"; use Stack\CallableHttpKernel; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; $app = new CallableHttpKernel(function (Request $request) { return new Response("Hello, world"); }); $stack = new Stack\Builder(); Stack\run($stack->resolve($app));
何もstackにpushしてないけどとりあえずこれで動く。
$ php -S localhost:9000
Twitter認証してみる
stack/sessionとigorw/stack-oauthをインストールする。
$ php composer.phar require stack/session:dev-master igorw/stack-oauth:dev-master
<?php require "vendor/autoload.php"; use Stack\CallableHttpKernel; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\RedirectResponse; $app = new CallableHttpKernel(function (Request $request) { $token = $request->attributes->get('oauth.token'); if (!$token) { return new RedirectResponse('/auth'); } $params = $token->getExtraParams(); return new Response("Hello, " . $params['screen_name']); }); $stack = (new Stack\Builder()) ->push('Stack\\Session') ->push('Igorw\\Stack\\OAuth', [ 'key' => getenv('OAUTH_KEY'), 'secret' => getenv('OAUTH_SECRET'), 'callback_url' => 'http://localhost:9000/auth/verify', 'success_url' => '/', 'failure_url' => '/auth', ]); Stack\run($stack->resolve($app));
一応動くけど多分このigorw/stack-oauthバグってるな。
続くかも。