PHP – Mieszanie warstwy logicznej z warstwą prezentacji
PHP – Mieszanie warstwy logicznej z warstwą prezentacji
PHP – Mieszanie warstwy logicznej z warstwą prezentacji

Zapewne wielu z Was w mniejszym lub większym stopniu, czy to ze szkoły czy też we własnym zakresie, zna język PHP. Jak wiadomo, jest to język, który wykonuje się po stronie serwera i (niestety!) pozwala na bezpośredni kontakt PHP z językiem HTML. Przejdźmy jednak do meritum tego artykułu..


Prosty Przykład

Powiedzmy, że chcemy wyświetlić wyrażenie a+b, dane mają być pobierane ze zmiennych, a następnie ma zostać wyświetlony poprawny wynik, na przykład: 2+2=4. Znaczna większość osób poszłaby na skróty, tworząc taki kod:

$a = 2;
$b = 2;
$c = $a + $b;
echo $a . " + " . $b . " = " $c.

lub taki:

<?php
$a = 2;
$b = 2;
$c = $a + $b;
?>
<?php echo $a; ?> + <?php echo $b; ?> = <?php echo $c; ?>

jest to przypadek skrajny, jednak osoby początkujące byłyby skłonne coś takiego zrobić bo „przecież się da” :)

Jak zrobić to inaczej?

Wystarczy stworzyć plik .html, w którym umieścimy naszą warstwę prezentacji. Powiedzmy że utworzyliśmy plik wynik.html, w którym znajduje się taki kod:

%a + %b = %c

Teraz musimy stworzyć naszą warstwę logiczną, stwórzmy więc plik oblicz.php, następnie musimy pobrać zawartość naszego pliku wynik.html do zmiennej, podmienić w nim wartość, a następnie go wyświetlić.

$a = 2;
$b = 2;
$c = $a + $b;

$content = file_get_contents("wynik.html");

$content = str_replace("%a", $a, $content);
$content = str_replace("%b", $b, $content);
$content = str_replace("%c", $c, $content);

die($content);

W taki sposób oddzieliliśmy warstwę prezentacji od warstwy logicznej. Nie zachodzi tutaj bezpośredni kontakt pomiędzy odrębnymi językami.

A co z bardziej zaawansowanymi stronami?

Raczej nikt nie wyobraża sobie generowania większych stron w taki sposób, dlatego z pomocą przychodzą gotowe silniki szablonów (ang. Template Engine). Nie tylko przyśpieszają one pracę pobierając wybrany szablon i podmieniając w nim wartości lecz niektóre z nich, dodatkowo pozwalają na proste wyrażenia typu if, for, itp. Posiadają one bowiem własny, wewnętrzny język skryptowy. Całość jest „renderowana” podczas wyświetlania.

Jaki silnik wybrać?

W sieci krąży ich pełno, pierwsze z brzegu to:

  • Blade
  • Mustache
  • Twig
  • Dwoo
  • Handlebars
    • Osobiście mogę polecić Handlebars, ponieważ posiada przyjemny język skryptowy i jest stosunkowo prosty dla początkujących. Wiadomo, że każdy wybierze to, co będzie mu odpowiadać.

      Czy w innych językach też występują takie problemy?

      Przyjrzyjmy się chociażby NodeJS, nie ma w nim problemu, ponieważ nie ma możliwości aby złączyć warstwę logiczną i aplikacji, wszystko jest jasno wydzielone. Kolejnym przykładem jest framework Django dla języka Python – występuje w nim model MVC (Model, View, Controller), tam również nie ma fizycznej możliwości aby pomylić wspomniane warstwy.