piotrgabryjeluk1
5,558 views
25 slides
May 24, 2012
Slide 1 of 25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
About This Presentation
Prezentacja przedstawi pokrótce zalety używania szablonów, język szablonów Twig i jego zalety względem alternatywnych rozwiązań dla PHP.
Size: 440.87 KB
Language: none
Added: May 24, 2012
Slides: 25 pages
Slide Content
TWIG
Niezłe widoki dla PHP
Piotr Gabryjeluk{meet}.php #5, Poznań 2012
Po co widoki
●Żeby odseparować wygląd od logiki
●Dla innych osób niż programiści
●Dla bezpieczeństwa
●Twig jest językiem szablonów,
a nie językiem programowania
●Twig pozwala na dostęp do
z góry określonych metod
●Twig pozwala na tworzenie
struktur w ramach szablonów
●Twig jest szybki i bezpieczny
Fabien Potencier
Twig jako język szablonów
Użycie meeting.html
→
<html>
<head><title>Spotkanie</title></head>
<body>
<h1>{{ spotkanie }} #{{ numer }}</h1>
<p>Miejsce: {{ miejsce }}, {{ miasto }}</p>
<p>Uczestnik: {{ imie }}</p>
</body>
</html>
Język szablonów Twiga
●Wyświetlenie zmiennej
{{ zmienna }}
●Filtr raw
{{ zmienna | raw }}
●Spaceless
{% spaceless %}
kod HTML
{% endspaceless %}
Mały wielki operator
.
Mały wielki operator
Multioperator „kropka”: {{ a.bar }}
●$a['bar']
●$a->bar
●$a->bar()
●$a->getBar()
●$a->isBar()
Kot pod wrażeniem operatora „kropki”
Szablony meeting.html
→
{% extend 'layout.html' %}
{% block tytul %}
{{ spotkanie }} #{{ numer }}
{% endblock %}
{% block tresc %}
<p>Miejsce: {{ miejsce }}, {{ miasto }}</p>
<p>Uczestnik: {{ imie }}</p>
{% endblock %}
Integracja
●Zend Framework: zwig
●Zend Framework 2: ZFTwig
●Symfony: out of the box
●Code Igniter: tak
●Twój framework: już wiesz jak to zrobić
Dla innych środowisk
●Python: DTL (Django), Jinja
●JavaScript: JinJS, Swig, Node-T, Templ8
●Ruby: Djerb, Liquid
Źródło
●http://twig.sensiolabs.org/
Dziękuję za uwagę
Bonus – PHP vs Twig vs Smarty
<?php
// Przykładowa klasa użytkownika
class User {
public function __construct($firstName, $lastName, $location) ...
public function getFirstName() …
public function getLastName() …
public function getLocation() … // zwraca array
}
// Kontekst przekazywany do szablonu
$context->add('users', array(
new User('Piotr', 'Gabryjeluk', array('city' => 'Poznań', 'street' => 'Św. Marcin')),
new User('Jan', 'Kowalski', array('city' => 'Tomyśl', 'street' => 'Towarowa')),
new User('Mariusz', 'Kolonko', array('city' => 'Nowy Jork', 'street' => 'Wall Street')),
));
Bonus – PHP (Zend View style)
<? foreach ($this->users as $u): ?>
<div class=”name”>
<?= $u->getFirstName() ?>
<?= $u->getLastName() ?>
</div>
<div class=”location”>
<?= $u->getLocation()['city'] ?>
<?= $u->getLocation()['street'] ?>
</div>
<? endforeach; ?>
Tylko w PHP 5.4!
A htmlspecialchars?
Bonus – Twig
{% for u in users %}
<div class=”name”>
{{ u.firstName }}
{{ u.lastName }}
</div>
<div class=”location”>
{{ u.location.city }}
{{ u.location.street }}
</div>
{% endfor %}
{{…..}}wyświetlanie
{%..%}logika, tagi
Do przejścia od ogółu do szczegółu
zawsze używamy kropki, a zatem bez
zmiany w szablonach, możemy
zmienić implementację zmiennych
przekazywanych do szablonu
(np. dodać lazy-metody zamiast
prepopulowanych arrayów)
Ułatwia to też prototypowanie:
można stworzyć szablony i wypełnić je
przykładowymi danymi (jako arraye),
a potem wymienić kod na taki, który
pobiera prawdziwe dane z bazy
(jako metody)