Slim Framework 매뉴얼 템플릿 (Templates)

템플릿 (Templates)

슬림은 기존의 MVC 프레임워크와 같은 view 레이어를 가지고 있지 않다. 대신 Slim의 view는 HTTP 응답입니다. 각 Slim 애플리케이션 경로는 적절한 PSR-7 응답 객체를 준비하고 반환해야 합니다.

슬림의 “view”는 HTTP 응답입니다.

즉, Slim 프로젝트는 템플릿을 PSR7 Response 객체에 렌더링하는 데 도움이 되는 Twig-ViewPHP-View 구성 요소를 제공합니다.

slim/twig-view 구성 요소 (The slim/twig-view component)

Twig-View PHP 구성 요소는 응용 프로그램에서 Twig 템플릿을 렌더링하는 데 도움이 됩니다. 이 구성 요소는 Packagist에서 사용할 수 있으며 Composer를 사용하면 다음과 같이 쉽게 설치할 수 있습니다.

composer require slim/twig-view

Figure 1: slim/twig-view 구성요소 설치

다음으로 Slim 앱에 Slim/twig-view 미들웨어를 추가해야 합니다.

<?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('path/to/templates', ['cache' => false]);
​
// Add Twig-View Middleware
$app->add(TwigMiddleware::create($app, $twig));

Figure 2: slim/twig-view 미들웨어 추가.

참고: 프로덕션 시나리오의 경우 컴파일된 템플릿을 저장하기 위해 ‘cache’를 일부 ‘path/to/cache’로 설정해야 합니다(따라서 모든 요청에 대한 중복을 방지). 자세한 내용은 Twig 환경 옵션을 참조하십시오.

이제 앱 경로 내에서 ‘slim/twig-view’ 구성 요소 서비스를 사용하여 템플릿을 렌더링하고 다음과 같이 PSR-7 Response 객체에 쓸 수 있습니다.

$app->get('/hello/{name}', function ($request, $response, $args) {
    $view = Twig::fromRequest($request);
    return $view->render($response, 'profile.html', [
        'name' => $args['name']
    ]);
})->setName('profile');
​
// Run app
$app->run();

Figure 3: slim/twig-view 컨테이너 서비스로 템플릿을 렌더링

이 예에서 경로 콜백 내부에서 호출되는 ‘$view’는 ‘fromRequest’ 메서드에 의해 반환된 \Slim\Views\Twig 인스턴스에 대한 참조입니다. \Slim\Views\Twig 인스턴스의 ‘render()’ 메소드는 PSR-7 응답 객체를 첫 번째 인수로, Twig 템플릿 경로를 두 번째 인수로, 템플릿 변수의 배열을 마지막 인수로 받아들인다. ‘렌더()’ 메서드는 본문이 렌더링된 Twig 템플릿인 새로운 PSR-7 Response 객체를 반환합니다.

url_for() 메서드 (The url_for() method)

‘slim/tig-view’ 구성 요소는 사용자 지정 ‘url_for()’ 함수를 Twig 템플릿에 표시합니다. 이 기능을 사용하여 Slim 애플리케이션의 명명된 경로에 대한 전체 URL을 생성할 수 있습니다. url_for() 함수는 두 개의 인수를 받아들인다.

\1. 경로 이름 \2. 경로 자리 표시자 이름 및 대체 값의 해시

두 번째 인수의 키는 선택한 경로의 패턴 자리 표시자와 일치해야 합니다. 위의 Slim 애플리케이션 예에 표시된 “profile” 명명 경로에 대한 링크 URL을 그리는 Twig 템플릿 예제입니다.

{% extends "layout.html" %}

{% block body %}
<h1>User List</h1>
<ul>
  <li><a href="{{ url_for('profile', { 'name': 'josh' }) }}">Josh</a></li>
</ul>
{% endblock %}

slim/php-view 구성요소 (The slim/php-view component)

PHP-View PHP 구성 요소는 PHP 템플릿을 렌더링하는 데 도움이 됩니다. 이 구성 요소는 Packagist에서 사용할 수 있으며 다음과 같이 Composer를 사용하여 설치할 수 있습니다.

composer require slim/php-view

Figure 6: slim/php-view 구성요소 설치

다음과 같이 Slim과 함께 사용할 수 있습니다.

<?php

use Slim\Factory\AppFactory;
use Slim\Views\PhpRenderer;
​
require __DIR__ . '/vendor/autoload.php';
​
​
​
// Create App
$app = AppFactory::create();
​
$app->get('/hello/{name}', function ($request, $response, $args) {
    $renderer = new PhpRenderer('path/to/templates');
    return $renderer->render($response, "hello.php", $args);
})->setName('profile');
​
$app->run();

Figure 8: slim/php-view 서비스로 템플릿을 렌더링합니다.

기타 템플릿 시스템 (Other template systems)

Twig-View와 PHP-View 구성 요소에만 국한되지 않습니다. 렌더링된 템플릿 출력을 PSR-7 Response 오브젝트의 본문에 쓰는 경우 PHP 템플리트 시스템을 사용할 수 있습니다.