Hello Worldの実装例
Naifyを最小構成で動かす実装例を紹介します。ブートストラップ、ルート定義、ハンドラ実装の3点だけを押さえれば、まず1本動かせます。
最初の1本として読むページ。
まずここで最小構成を掴み、そのあと必要に応じてDB、NaifyView、Session、エラーハンドリングへ進むと流れが自然です。
ファイル配置
プロジェクト直下に libs/Naify を配置し、Webサーバーの公開ディレクトリを public に設定します。PHPファイルには先頭に <?php を付けます。
[project]/
├── libs/Naify/
├── SampleAppBootstrap.php
├── public/index.php
├── config/
├── routes/routes.php
└── app/Controllers/IndexController.php
公開する入口はpublic/index.phpです。ここからプロジェクト直下のブートストラップを読み込みます。
// public/index.php
require dirname(__DIR__) . '/SampleAppBootstrap.php';
まず /index.php へアクセスして確認します。以降のURL例では、未解決のリクエストをこの入口へ渡すWebサーバー設定を前提とします。
ブートストラップ
Naifyを初期化し、Application / Routerを作って、ルート定義を読み込みます。
// SampleAppBootstrap.php(プロジェクト直下)
use Naify\Naify;
require __DIR__ . '/libs/Naify/Naify.php';
Naify::boot();
Naify::autoload('App', __DIR__ . '/app');
$config = Naify::createConfig()
->setAppId('sample-app')
->setSystemDir(__DIR__)
->setPublicDir(__DIR__ . '/public')
->setConfigDir(__DIR__ . '/config')
->setBasePath($_SERVER['SCRIPT_NAME'] ?? '/');
$app = Naify::createWebApp($config);
$app->loadRoute('routes/routes.php');
$app->run();
ルート定義
このサンプルでは routes/routes.php にまとめて置きます。まずは1ルートだけで十分です。
// routes/routes.php
use Naify\Router\Router;
return static function (Router $router): void
{
$to = $router->createRouteFactory('App\\Controllers\\');
$router->any('/', $to('IndexController::index'));
};
ハンドラ実装
Naifyが要求するのは RequestContextHandlerInterface の実装です。Controllerはその代表例です。
namespace App\Controllers;
use Naify\Router\RequestContext;
use Naify\Router\RequestContextHandlerInterface;
class IndexController implements RequestContextHandlerInterface
{
private RequestContext $context;
public function handle(RequestContext $context, ?string $action): void
{
$this->context = $context;
$action ??= $context->getUrlParam('action', 'index');
$action .= 'Action';
$this->{$action}();
}
public function indexAction(): void
{
echo '<h1>Hello, Naify!</h1>';
}
}