■ 백엔드 ■/Slim2018.05.24 11:54

   Twig views


composer require slim/twig-view


https://github.com/slimphp/Twig-View


   Configure the view


<?php
return[
    // ...
    'view' => [
        'template_path' => 'app/templates',
        'twig' =>[
            'cache' => 'cache/twig',
            'debug' => true,
            'auto_reload' => true,
        ],
    ],
];



Register the view

<?php
// Create the view object
$view = new \Slim\Views\Twig(
    $settings['view']['template_path'],
    $settings['twig']);

// add extensions
$twig = $view->getEnvironment();
$twig->addExtension(new Twig_Extension_Debug());

$app->register($app['TwigView']);



Template

<html>
  <head>
    <title>Hello {{ name }}</title>
    <link rel='stylesheet' href='/css/style.css'>
  </head>
  <body>
     <h1>Hello {{ name }}</h1>
  </body>
</html>


Render

<?php
$app->get('/hello/{name}', function($request, $response, $args) (use $app){
   $body = $app['view']->fetch('hello.twig', [
      'name' => $args['name'],
   ]);
 
   return $response->write($body);
});



결과




   Details


Slim Framework Twig View

Build Status

This is a Slim Framework view helper built on top of the Twig templating component. You can use this component to create and render templates in your Slim Framework application. It works with Twig 1.18+ (PHP5.5+) and with Twig 2 (PHP7).

Install

Via Composer

$ composer require slim/twig-view

Requires Slim Framework 3 and PHP 5.5.0 or newer.

Usage

// Create Slim app
$app = new \Slim\App();

// Fetch DI Container
$container = $app->getContainer();

// Register Twig View helper
$container['view'] = function ($c) {
    $view = new \Slim\Views\Twig('path/to/templates', [
        'cache' => 'path/to/cache'
    ]);
    
    // Instantiate and add Slim specific extension
    $router = $c->get('router');
    $uri = \Slim\Http\Uri::createFromEnvironment(new \Slim\Http\Environment($_SERVER));
    $view->addExtension(new \Slim\Views\TwigExtension($router, $uri));

    return $view;
};

// Define named route
$app->get('/hello/{name}', function ($request, $response, $args) {
    return $this->view->render($response, 'profile.html', [
        'name' => $args['name']
    ]);
})->setName('profile');

// Render from string
$app->get('/hi/{name}', function ($request, $response, $args) {
    $str = $this->view->fetchFromString('<p>Hi, my name is {{ name }}.</p>', [
        'name' => $args['name']
    ]);
    $response->getBody()->write($str);
    return $response;
});

// Run app
$app->run();

Custom template functions

TwigExtension provides these functions to your Twig templates:

  • path_for() - returns the URL for a given route.
  • base_url() - returns the Uri object's base URL.
  • is_current_path() - returns true is the provided route name and parameters are valid for the current path.
  • current_path() - renders the current path, with or without the query string.

You can use path_for to generate complete URLs to any Slim application named route and use is_current_path to determine if you need to mark a link as active as shown in this example Twig template:

{% extends "layout.html" %}

{% block body %}
<h1>User List</h1>
<ul>
    <li><a href="{{ path_for('profile', { 'name': 'josh' }) }}" {% if is_current_path('profle', { 'name': 'josh' }) %}class="active"{% endif %}>Josh</a></li>
    <li><a href="{{ path_for('profile', { 'name': 'andrew' }) }}">Andrew</a></li>
</ul>
{% endblock %}

Testing

phpunit

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email security@slimframework.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.



'■ 백엔드 ■ > Slim' 카테고리의 다른 글

public 폴더  (0) 2018.07.02
Slim Framework 3 Skeleton Application  (0) 2018.06.25
Twig views  (0) 2018.05.24
Middleware  (0) 2018.05.24
Routes  (0) 2018.05.24
index.php  (0) 2018.05.24
03. 웹서버 설정  (0) 2018.05.23
02. 컴포저로 slim 설치하기  (0) 2018.05.22
01. Getting started with Slim 3  (0) 2018.05.22
Posted by SAP (Study And Programming) by serpiko

댓글을 달아 주세요