Slim Templates

Programming/Slim 2016. 3. 13. 01:40

Slim 은 MVC 프레임워크 같은 뷰 레이어가 없다. Slim 에서 "View" 란 HTTP 응답이다.

각 Slim 어플리케이션 라우트는 적절한 PSR-7 응답 객체를 준비하고 반환한다.

Slim 프로젝트는 PSR-7 Response 객체에 템플릿을 적용(render)하도록 Twig-ViewPHP-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 템플릿은 무엇이든 사용할 수 있다.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,