Twig-View PHPコンポーネントは、アプリケーションでTwigテンプレートをレンダリングするのに役立ちます。このコンポーネントはPackagistで入手でき、Composerを使って簡単にインストールできます。
composer require slim/twig-view
次に、Slimアプリにミドルウェアを追加する必要があります。
<?php
use Slim\Factory\AppFactory;
use Slim\Views\Twig;
use Slim\Views\TwigMiddleware;
require __DIR__ . '/../vendor/autoload.php';
// Create App
$app = AppFactory::create();
// Create Twig
$twig = Twig::create(__DIR__ . '/../templates', ['cache' => false]);
// Add Twig-View Middleware
$app->add(TwigMiddleware::create($app, $twig));
注意: 本番環境では、コンパイル済みテンプレートを保存するために(リクエストごとに再コンパイルされないように)、cache
を 'path/to/cache'
に設定する必要があります。詳細については、Twig 環境オプションを参照してください。
これで、アプリルート内でslim/twig-view
コンポーネントサービスを使用して、テンプレートをレンダリングし、PSR-7レスポンスオブジェクトに書き込むことができます。
$app->get('/', function ($request, $response) {
$view = Twig::fromRequest($request);
return $view->render($response, 'home.html.twig', [
'name' => 'John',
]);
});
// Run app
$app->run();
この例では、ルートコールバック内で呼び出される$view
は、fromRequest
メソッドによって返される \Slim\Views\Twig
インスタンスへの参照です。\Slim\Views\Twig
インスタンスの render()
メソッドは、最初の引数としてPSR-7レスポンスオブジェクト、2番目の引数としてTwigテンプレートパス、最後の引数としてテンプレート変数の配列を受け取ります。render()
メソッドは、レンダリングされたTwigテンプレートをボディとする新しいPSR-7レスポンスオブジェクトを返します。
プロジェクトルートに templates/
ディレクトリを作成します。
templatesディレクトリ内にTwigテンプレートファイルを作成します: templates/home.html.twig
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Slim!</title>
</head>
<body>
<h1>Hello {{ name }}</h1>
</body>
</html>
slim/twig-view
コンポーネントは、Twigテンプレートにカスタム url_for()
関数を公開します。この関数を使用して、Slimアプリケーション内の任意の名前付きルートへの完全なURLを生成できます。url_for()
関数は2つの引数を受け取ります。
2番目の引数のキーは、選択したルートのパターンプレースホルダーに対応している必要があります。これは、上記のSlimアプリケーションの例に示されている「profile」という名前のルートのリンクURLを描画するTwigテンプレートの例です。
<a href="{{ url_for('profile', { 'name': 'josh' }) }}">Josh</a></li>