Slim 은 MVC 프레임워크 같은 뷰 레이어가 없다. Slim 에서 "View" 란 HTTP 응답이다.
각 Slim 어플리케이션 라우트는 적절한 PSR-7 응답 객체를 준비하고 반환한다.
Slim 프로젝트는 PSR-7 Response 객체에 템플릿을 적용(render)하도록 Twig-View 와 PHP-View 컴포넌트를 제공한다.
The slim/twig-view component
Twig-View PHP 컴포넌트는 어플리케이션에 Twig 템플릿을 렌더링해 준다.
이 컴포넌트는 패키지리스트에서 이용 가능하며 Composer 로 쉽게 설치할 수 있다.
$ composer require slim/twig-view | cs |
설치하였으면, Slim app 의 컨테이너에 서비스로 컴포넌트를 등록한다.
<?php // Create app $app = new \Slim\App(); // Get container $container = $app->getContainer(); // Register component on container $container['view'] = function ($container) { $view = new \Slim\Views\Twig('path/to/templates', [ 'cache' => 'path/to/cache' ]); $view->addExtension(new \Slim\Views\TwigExtension( $container['router'], $container['request']->getUri() )); return $view; }; | cs |
"cache" 를 사용하지 않기 위해 false 로 지정할 수 있고, 개발 환경에서 유용한 'auto_reload' 옵션도 살펴 본다.
더 많은 정보는 Twig environment options 를 찾아 본다.
이제 템플릿을 적용하기 위해 app 라우트에 slim/twig-view 컴포넌트 서비스를 사용하고, PSR-7 Response 객체에 작성할 수 있다.
// Render Twig template in route $app->get('/hello/{name}', function ($request, $response, $args) { return $this->view->render($response, 'profile.html', [ 'name' => $args['name'] ]); })->setName('profile'); // Run app $app->run(); | cs |
예제에서, 라우트 콜백안에 호출된 $this->view 는 view 컨테이너 서비스로부터 반환된 \Slim\Views\Twig 인스턴스를 참조한다.
\Slim\Views\Twig 인스턴스의 render() 메소드는 첫번째 매개변수로 PSR-7 Response 객체를, 두번째 매개변수로 Twig 템플릿 경로를, 마지막 매개변수로 템플릿 변수의 배열을 받는다.
render() 메소드는 본문이 Twig 템플릿으로 적용된 새로운 PSR-7 Response 객체를 반환한다.
path_for() method
slim/twig-view 컴포넌트는 Twig 템플릿으로 사용자 정의 path_for(route name, placeholder and values) 함수를 노출한다.
Slim 어플리케이션의 모든 라우터에 완전한 URL 들을 생성하기 위해 이 함수를 사용할 수 있다.
두번째 매개변수의 키는 라우트의 패턴 placeholder 이다.
아래 예제는 위 Slim 어플리케이션 예제에서 작성한 profile 이란 라우트에 대한 URL 링크를 생성하는 Twig 템플릿이다.
{% extends "layout.html" %} {% block body %} <h1>User List</h1> <ul> <li><a href="{{ path_for('profile', { 'name': 'josh' }) }}">Josh</a></li> </ul> {% endblock %} | cs |
The slim/php-view component
PHP-View PHP 컴포넌트는 PHP 템플릿을 렌더링 해준다.
이 컴포넌트는 패키지리스트에서 이용 가능하며 Composer 로 쉽게 설치할 수 있다.
$ composer require slim/php-view | cs |
설치하였으면, Slim app 의 컨테이너에 서비스로 컴포넌트를 등록한다.
<?php // Create app $app = new \Slim\App(); // Get container $container = $app->getContainer(); // Register component on container $container['view'] = function ($container) { return new \Slim\Views\PhpRenderer('path/to/templates'); }; | cs |
PHP view 를 렌더링하기 위해 view 컴포넌트를 사용한다.
// Render Twig template in route $app->get('/hello/{name}', function ($request, $response, $args) { return $this->view->render($response, 'profile.html', [ 'name' => $args['name'] ]); })->setName('profile'); // Run app $app->run(); | cs |
Other template systems
위 두가지 컴포넌트 외에도 PSR-7 Response 객체의 본문으로 렌더링된 템플릿 출력이 가능한 PHP 템플릿은 무엇이든 사용할 수 있다.