はじめに

Composer は PHP の世界において、パッケージ管理ツールのデファクトスタンダードとなっています。Aura フレームワークにおいても同じです。

インストール

composer create-project --stability=dev aura/framework-project {$PROJECT_PATH}

{$PROJECT_PATH} を実際のパスに置き換えてください

このコマンドは {$PROJECT_PATH} というディレクトリを作成し、 vendor フォルダに依存関係をインストールします。

構造

ディレクトリ構造は以下のようなものになります。このリストはいくつかのファイルやディレクトリを削除しているため、完全なものではありません。

├── CHANGES.md
├── cli
│   └── console.php
├── composer.json
├── composer.lock
├── config
│   ├── Common.php
│   ├── Dev.php
│   ├── _env.php
│   ├── Prod.php
│   └── Test.php
├── src
├── tests
├── tmp
│   ├── cache
│   └── log
│       └── dev.log
├── vendor
│   ├── aura
│   │   ├── cli
│   │   ├── cli-kernel
│   │   ├── di
│   │   ├── dispatcher
│   │   ├── project-kernel
│   │   ├── router
│   │   ├── web
│   │   └── web-kernel
│   ├── autoload.php
│   ├── monolog
│   │   └── monolog
│   └── psr
│       └── log
└── web
    └── index.php

バーチャルホストを設定して web/index.php へアクセスできるようにする必要があります。詳細については使用しているバーチャルホストの設定を確認してください。

ここでは、組み込みのPHPサーバーを利用してみます。

php -S localhost:8000 -t web/

Web ブラウザで http://localhost:8000 を開くと、 Hello World! のメッセージを見ることができます。

すばらしい!問題なく動作していますね。

Hello World! を探る

config/Common.php を開いてください。modifyWebRouter()modifyWebDispatcher() のメソッドを見てみます。

public function modifyWebRouter(Container $di)
{
    $router = $di->get('aura/web-kernel:router');
    $router->add('hello', '/')
           ->setValues(array('action' => 'hello'));
}

modifyWebRouter() ではルータサービスを取得して、 /hello というルート名で追加しています。これにより http://localhost:8000 へのすべてのリクエストは hello というルート名で処理されます。

リクエストが来たときにどんな処理が行われるのか、ルータは知りません。ディスパッチャがディスパッチ処理を手伝います。

public function modifyWebDispatcher($di)
{
    $dispatcher = $di->get('aura/web-kernel:dispatcher');

    $dispatcher->setObject('hello', function () use ($di) {
        $response = $di->get('aura/web-kernel:response');
        $response->content->set('Hello World!');
    });
}

ディスパッチャサービスを取得し、setObject にコントローラのルートと同じ名前をセットして、クロージャまたはコールバックで処理を記述します。

この例ではクロージャを使用しています。use で受け取った DI コンテナを利用して Web レスポンスオブジェクトを取得し、レスポンスの内容をセットしています。

Dependency Injection (依存性の注入)と DI コンテナについてはあまり気にしないでください。これからの章で詳細を説明します。