Prezentacja przedstawi pokrótce zalety używania szablonów, język szablonów Twig i jego zalety względem alternatywnych rozwiązań dla PHP.
1 of 25
Download to read offline
More Related Content
TWIG - niezłe widoki dla PHP
1. TWIG
Niezłe widoki dla PHP
{meet}.php #5, Poznań 2012 Piotr Gabryjeluk
2. Po co widoki
● Żeby odseparować wygląd od logiki
● Dla innych osób niż programiści
● Dla bezpieczeństwa
3. Twig jako język szablonów
● 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
Fabien Potencier
● Twig jest szybki i bezpieczny
12. Warunki
● {% if warunek %} … {% endif %}
● operatory logiczne: or, and, not, ()
● testy: is odd, is even, is empty, is constant
13. Pętle
{% for u in uczestnicy %}
<p>{{ loop.index }}</p>
<p>{{ u.imie }} {{ u.nazwisko }}</p>
<p>{{ u.miasto }}</p>
{% if u.organizator %}
<p class=”role”>organizator</p>
{% endif %}
{% endfor %} Przykładowa pętla
14. Range
{% for i in range(1, gwiazdki) %}
<img src=/slideshow/twig-nieze-widoki-dla-php/13055695/”/img/star.png” alt=”*”>
{% endfor %}
Uwaga na range(1, 0)!
17. Szablony → meeting.html
{% extend 'layout.html' %}
{% block tytul %}
{{ spotkanie }} #{{ numer }}
{% endblock %}
{% block tresc %}
<p>Miejsce: {{ miejsce }}, {{ miasto }}</p>
<p>Uczestnik: {{ imie }}</p>
{% endblock %}
18. Integracja
● Zend Framework: zwig
● Zend Framework 2: ZFTwig
● Symfony: out of the box
● Code Igniter: tak
● Twój framework: już wiesz jak to zrobić
19. Dla innych środowisk
● Python: DTL (Django), Jinja
● JavaScript: JinJS, Swig, Node-T, Templ8
● Ruby: Djerb, Liquid
22. 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')),
));
23. 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?
24. Bonus – Smarty
{foreach $users as $u}
<div class=”name”>
{u->getFirstName} → dla obiektów
. dla tablic asocjacyjnych
{u->getLastName}
</div>
<div class=”location”>
{u->getLocation.city}
{u->getLocation.street}
</div>
{/foreach}
25. Bonus – Twig
{% for u in users %} {{…..}} wyświetlanie
{%..%} logika, tagi
<div class=”name”>
Do przejścia od ogółu do szczegółu
{{ u.firstName }} zawsze używamy kropki, a zatem bez
zmiany w szablonach, możemy
{{ u.lastName }} zmienić implementację zmiennych
</div> przekazywanych do szablonu
(np. dodać lazy-metody zamiast
<div class=”location”> prepopulowanych arrayów)
{{ u.location.city }} Ułatwia to też prototypowanie:
można stworzyć szablony i wypełnić je
{{ u.location.street }} przykładowymi danymi (jako arraye),
a potem wymienić kod na taki, który
</div> pobiera prawdziwe dane z bazy
{% endfor %} (jako metody)