PHPフレームワーク「Aura v2」がクリーン過ぎるので試してみる
日本でまだ誰も紹介していないようなので、今日は新しいPHPフレームワーク「Aura v2 -- Aura.Web_Project」を紹介します。
Lighter than Silex, and slimmer than Slim, the Aura.Web_Project package is a minimalist web-specific project framework that starts out small and grows only as you need it.
http://auraphp.com/blog/2013/12/12/aura-v2-web-project/
参考訳:Silexより軽く、Slimよりスリム、Aura.Web_Projectパッケージは、あなたが必要とする小さく始めて成長する、ミニマリストのWebに特化したプロジェクトのフレームワークです。
Aura Projectとは?
Aura Projectは、PHP 5.4以上向けの独立したライブラリパッケージを提供しています。「Libraries First, Framework Second」を主張しています。
- The Aura Project for PHP http://auraphp.com/
日本では、BEAR.Sundayの@koriymさんがメンバーとして参加されています。
Auraフレームワークのチームメンバーになりました!Auraフレームワーク http://t.co/DtgYvR5BWJ は@pmjones 氏の「ライブラリ・ファースト」なFWで、BEAR.Sundayもコンポーネントを沢山つかってます。まずは日本語訳を勧めたいと思います。
— Akihito Koriyama (@koriym) 2013, 9月 19
高品質のコンポーネントを提供するプロジェクトのフレームワークということで、Symfonyに似ています。しかし、Symfonyフレームワークが重量級のフルスタックであるのに対し、Auraは真逆で最小限のフレームワークというアプローチを採用しているようです。
Aura.Web_Projectパッケージとは?
Aura Projectの提供するパッケージを使った「minimal framework」です。
本当に最低限のものしかなく、
- DIコンテナ
- 設定システム
- ルータとディスパッチャー
- RequestおよびResponseクラス
- ロギング
しかありません。
パッケージを自由に組み込んで、自分で作り込んでいくタイプ、いわゆるグルー・フレームワークです。
組み込んでいくパッケージはもちろんAura Projectのものでなくても構いません。
インストール
Composerよりインストールします。ここでは、プロジェクト名はAura
とします。
$ composer create-project --stability=dev aura/web-project Aura
PHPビルトインWebサーバを起動するには、以下のようにします。
$ cd Aura
$ php -S localhost:8000 -t web/
はい、簡単ですね。
デフォルトでは、tmp/{$mode}.log
にログファイルが書き込まれますので、Webサーバを別に建てた場合など、必要ならパーミッションを変更してください。
$ chmod -R 777 tmp
Hello World(マイクロフレームワークスタイル)
それでは、Hello Worldを表示させてみましょう。
まず、マイクロフレームワーク風にルーティング設定ファイルにコントローラロジックを記述してみます。
ルーティングは、config/default/modify/web_router.php
に記載します。
config/default/modify/web_router.php:
<?php
/**
*
* This file is part of Aura for PHP.
*
* @package Aura.Web_Project
*
* @license http://opensource.org/licenses/bsd-license.php BSD
*
* @var Aura\Di\Container $di The DI container.
*
*/
// get the router service
$router = $di->get('web_router');
// example route for 'hello world' using request and response services
$request = $di->get('web_request');
$response = $di->get('web_response');
$router->add('hello', '/Aura/hello/{name}')
->addValues([
'controller' => function ($name) use ($request, $response) {
$content = "Hello World! $name";
$response->content->set(
htmlspecialchars($content, ENT_QUOTES|ENT_SUBSTITUTE, 'UTF-8')
);
}
]);
// add routes below
ここで、以下がHellow World用のルーティング情報です。/Aura/hello/{name}
にアクセスされた場合、定義したコントローラが実行されます。
$router->add('hello', '/Aura/hello/{name}')
->addValues([
'controller' => function ($name) use ($request, $response) {
$content = "Hello World! $name";
$response->content->set(
htmlspecialchars($content, ENT_QUOTES|ENT_SUBSTITUTE, 'UTF-8')
);
}
]);
ここではクロージャでレスポンスのコンテンツをセットしています。
localhost:8000/Aura/hello/aura
にアクセスすると、「Hello World! aura」と表示されます。
Hello World(フルスタックスタイル)
次は、MVCフレームワーク風にコントローラクラスを作成してみます。
src/App/Controllers
フォルダを作成し、そこにHelloController.php
を作成します。
src/App/Controllers/HelloController.php:
<?php
/**
* {$PROJECT_PATH}/src/App/Controllers/HelloController.php
*/
namespace App\Controllers;
use Aura\Web\Request;
use Aura\Web\Response;
class HelloController
{
public function __construct(Request $request, Response $response)
{
$this->request = $request;
$this->response = $response;
}
public function say($name)
{
$content = "Hello World! $name";
$this->response->content->set(
htmlspecialchars($content, ENT_QUOTES|ENT_SUBSTITUTE, 'UTF-8')
);
}
}
続いて、DIコンテナでHelloControllerを定義します。以下のファイルの最後に以下を追加します。
config/default/define.php:
$di->params['App\Controllers\HelloController'] = [
'request' => $di->lazyGet('web_request'),
'response' => $di->lazyGet('web_response'),
];
ディスパッチャーにHelloControllerを設定します。以下のファイルの最後に以下を追加します。
config/default/modify/web_dispatcher.php:
$dispatcher->setObject('hello_c', $di->lazyNew('App\Controllers\HelloController'));
最後にルーティング情報を変更します。
config/default/modify/web_router.php:
$router->add('hello', '/Aura/hello/{name}')
->addValues([
'controller' => 'hello_c',
'action' => 'say',
]);
localhost:8000/Aura/hello/aura
にアクセスすると、「Hello World! aura」と表示されます。
まとめ
このようにAura.Web_Projectは非常にシンプル、クリーンでわかりやすい構造になっています。
フレームワークについての知識がないと理解できないコードはありません。コントローラもフレームワークに密結合していません。
Aura.Web_Projectに興味を持たれた方は、Paul M. Jones氏の書かれた「A Peek At Aura v2 -- Aura.Web_Project, The Micro/Macro Web Framework」を読まれるとよいでしょう。
また、あのBEAR.SundayもAuraの提供するパッケージをたくさん使っているということで、Auraの提供するパッケージの品質も期待できそうです。
参考
Date: 2014/02/05