
템플릿 (Templates)
슬림은 기존의 MVC 프레임워크와 같은 view
레이어를 가지고 있지 않다. 대신 Slim의 view는 HTTP 응답입니다. 각 Slim 애플리케이션 경로는 적절한 PSR-7 응답 객체를 준비하고 반환해야 합니다.
슬림의 “view”는 HTTP 응답입니다.
즉, Slim 프로젝트는 템플릿을 PSR7 Response 객체에 렌더링하는 데 도움이 되는 Twig-View 및 PHP-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 템플리트 시스템을 사용할 수 있습니다.