Laravel i Symfony - główne różnice
W każdym projekcie trzeba podjąć decyzję dotyczącą tego, jakiej technologii użyć. W przypadku web developmentu firmy najczęściej decydują się na frameworki PHP. Ale który z nich wybrać? Dzisiaj postanowiłem przedstawić dwa najpopularniejsze frameworki PHP: Symfony oraz Laravel, a tym samym porównać ich cechy wspólne, pokazać różnice oraz przydatność względem konkretnych typów projektów.
Zestawienia framworków
Symfony |
Laravel |
|
Strona projektu |
https://symfony.com/ |
https://laravel.com/ |
Rok wydania |
2011 |
2011 |
Aktualna wersja |
5.1.3 (1 maja 2020) |
8.4.1 (10 listopada 2020) |
Licencja |
MIT License |
MIT License |
Wzorzec projektowy |
Oparty na MVC. Modularna struktura, możliwość wielokrotnego użytku napisanego kodu. |
Oparty na MVC. Część zależności dostępna od startu pozwala na szybkie rozpoczęcie pracy nad projektem. |
Templating engine |
Twig - wykorzystuje filtry do modyfikacji danych. |
Blade - możliwość wstawiania dowolnego kodu PHP w ciało skórki. |
Baza danych |
Doctrine ORM. Bazy danych obsługiwane out of the box:
|
Eloquent ORM. Bazy danych obsługiwane out of the box: - MySQL, - PostgreSQL - SQLite - SQLServer. |
Główne założenie |
Stworzony do dużych, długo rozwijanych projektów. |
Prostota i szybkość pisanego kodu. |
Podstawowe informacje
Symfony. Framework PHP na licencji open source korzystający ze wzorca projektowego model-view-controller. Najczęściej wybierany do dużych, złożonych projektów. Symfony 2 wydane zostało w 2011 r. i ten rok uznać należy za początek frameworka, który dzisiaj znamy pod tą nazwą. Symfony 1 było zupełnie innym projektem, o innych bazowych założeniach.
Data wydania: 2011
Aktualna stabilna wersja: 5.1.3 (1 maja 2020)
Laravel. Framework PHP na licencji open source korzystający ze wzorca projektowego model-view-controller. Pierwotnie wydany w 2011 roku, jednakże to z wersją 4 w roku 2013 przyszło znaczne zwiększenie zainteresowania projektem. Laravel to aktualnie najpopularniejszy framework na rynku. Autorzy stawiają za siłę tego frameworka intuicyjność, prostotę i szybkość pisanego kodu.
Data wydania: 9 czerwca 2011
Aktualna stabilna wersja: 8.4.1 (10 listopada 2020)
Podobieństwa
Już podstawowe informacje na temat tych frameworków zdradzają wiele ich cech wspólnych. Pierwszym co rzuca się w oczy to fakt, iż oba frameworki są dostępne na licencji open source i oba korzystają z języka PHP. Ponadto możliwość rozbudowywania systemu za pomocą dodatkowych modułów i komponentów oraz multiplatformowość to czynniki, które zbliżają do siebie Symfony oraz Laravel.
Wsparcie pracy z bazami danych w obu przypadkach jest podobne, gdyż systemy korzystają z ORM (Object–relational mapping) - Doctrine w przypadku Symfony, oraz Eloquent po stronie Laravel.
Na pierwszy rzut oka frameworki mogą się zdawać wręcz bliźniacze, lecz jak to zwykle bywa, diabeł tkwi w szczegółach.
Symfony - wyróżniki
W przeciwieństwie do Laravel, Symfony powstało z myślą o przedsięwzięciach dużej skali, co odbija się na większości decyzji, jakie podjęto przy jego projektowaniu. Symfony, na którym pracujemy w Droptica, wykorzystywane jest przez wiele znanych projektów takich jak Drupal, PrestaShop, Magento czy jako baza dla innych frameworków: między innymi Laravel, Yii czy CakePHP. Świadczy to o jego wszechstronności i elastyczności.
Symfony jest zbudowane jako rozwiązanie modularne, składające się z niezależnych od siebie elementów (bundle). Są to instalowalne paczki plików zawierające już jakieś konkretne funkcjonalności. Dobrym przykładem takiej paczki może być komunikator lub system płatności. Takie rozwiązanie pozwala nam uniezależnić kod od pisanego systemu i wykorzystać stworzone bundle w innych projektach.
Często przytaczaną zaletą Symfony jest jej wydajność. I choć pod tym stwierdzeniem mogę się z czystym sumieniem podpisać, warto pamiętać, że sama prędkość jest uzależniona od wykorzystanych przez nas komponentów i podstawowych elementów. Ciężko wymagać dużej wydajności, gdy wykorzystane bundle są źle zaprojektowanie i działają najzwyczajniej źle. Najprościej jest powiedzieć, że wydajność Symfony jest sumą jej składowych wydajności, lecz jej bazowe osiągi są bardzo wydajną podstawą.
Społeczność zgromadzona wokół Symfony to wciąż jedna z największych w sieci, dzięki czemu rozwiązywanie problemów, czy rozwijanie aplikacji o dodatki stworzone przez użytkowników to niezwykle przyjemne zadanie.
Jako swój template engine, Symphony używa Twig. Rozwiązanie to generuje na kod PHP pliki templatki z rozszerzeniem .twig. Jest to powszechne i znane rozwiązanie, z którego korzystamy w ramach dostarczanych przez nas usług PHP development. Jego zaletą na pewno jest wydajność i prostota pisanego kodu. Wadą natomiast jest fakt, że twig nie pozwala na wstrzykiwanie kodu PHP - w to miejsce zmuszeni jesteśmy do używania filtrów.
{{ 'Tekst pisany wielkimi literami'|upper }}
Nie jesteśmy tutaj jednak ograniczeni do używania wyłącznie filtrów przygotowanych przez autorów Twig - filtry takie możemy tworzyć sami i rozszerzać ich zasób.
Przykładowy plik Twig:
<!DOCTYPE html>
<html>
<head>
<title>Twig example file</title>
</head>
<body>
<h1>{{ page_title }}</h1>
{% if user.isLoggedIn %}
<p>Hello {{ user.name }}!</p>
{% endif %}
<ul id="navigation">
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
</body>
</html>
Laravel - wyróżniki
Pierwszą i najważniejszą rzeczą jaką trzeba wiedzieć na temat Laravel jest to, iż framework ten jest zbudowany na komponentach Symfony. Laravel używa również Symfony jako swojego szkieletu, jednak uzupełnia to swoją logiką i wizją na pisanie oprogramowania w języku PHP. Podstawowym pryncypium dla Laravel jest intuicyjność i szybkość pisania kodu. Autorzy wychodzą z założenia, iż przy dzisiejszym zapotrzebowaniu rynku na rozwiązania programistyczne, to czas i zasoby powinny odgrywać główną rolę przy tworzonym projekcie. Choć z pozoru myślenie takie wydawać się może słuszne, dużo osób zwraca uwagę na krótkowzroczność takiego podejścia, przez co często Laravel kojarzony jest z projektami mniejszymi, zrobionymi “na szybko”. Żeby nie odstraszać was już na starcie, ze swojej strony powiem, że choć może jest w tym ziarenko prawdy, tak naprawdę wszystko zależy od osób, które z tego rozwiązania korzystają i w jaki sposób wykorzystają jego potencjał.
Wspomniana logika rzuca się w oczy już po zainstalowaniu Laravel. Framework wita nas na starcie gotowymi zależnościami i w pełni gotowym do pracy środowiskiem. W przeciwieństwie do Symfony, dla osób nie chcących samodzielnie konfigurować wszystkiego na początku, Laravel udostępnia nam już część niezbędnych do pracy narzędzi. Za przykład może tu posłużyć choćby wspomniany wcześniej Eloquent ORM lub vue.js, którego obsługę dostajemy out of the box. Dla osób początkujących lub ceniących swój czas, wejście w tworzenie oprogramowania może być dużo płynniejsze i szybsze niż w przypadku Symfony. Rozwiązanie takie ma również swoje wady, gdyż najprawdopodobniej nie będziemy używać wszyskiego, co Laravel oferuje nam od startu, co przekłada się na masę zbędnego kodu trzymanego w projekcie.
Metody magiczne to również element, który może “kupić” wiele osób przy wyborze frameworka na swoje potrzeby. W skrócie: zapewniają one szybkość pisania kodu bez konieczności tworzenia skomplikowanych i rozbudowanych linii kodu. Bardziej niż na samym kodzie i jego poprawności pomagają się one nam skupić na logice działania projektu.
Kolejną bardzo przydatną cechą i funkcjonalnością Laravel, którą dostajemy od samego początku, jest system autoryzacji tak kluczowy dla web developmentu. W przeciwieństwie do Symfony, framework ten posiada już obsługujący autoryzację system, a konfiguracja z naszej strony ogranicza się do skonfigurowania bazy danych przy migracji.
W przeciwieństwie do Symfony, jako template engine, Laravel używa silnika Blade. Choć jest to kwestia sporna, dla mnie jest to rozwiązanie lepsze od Twig. Na podstawowym poziomie oba rozwiązania są dość zbliżone w sposobie działania do siebie, jednak to, co wyróżnia Blade, to możliwość umieszczania kodu bezpośrednio w pliku z templatką. Ta mała różnica znacznie uprzyjemnia pracowanie z szablonami.
{{ strtoupper('Tekst pisany wielkimi literami') }}
Przykładowy plik Blade:
<!DOCTYPE html>
<html>
<head>
<title>Blade example file</title>
</head>
<body>
<h1>{{ $page_title }}</h1>
{% if $user->isLoggedIn() %}
<p>Hello {{ $user->name }}!</p>
{% endif %}
<ul id="navigation">
@foreach ($navigation as $item)
<li><a href="{{ $item->href }}">{{ $item->caption }}</a></li>
@endforeach
</ul>
</body>
</html>
Podsumowanie
Wybór odpowiedniego frameworka nigdy nie jest zadaniem prostym. Mam nadzieję, że mój wpis choć w małym stopniu pomoże wam zrozumieć główne różnice między dwoma najpopularniejszymi rozwiązaniami dla PHP. Celowo mówię tu o “głównych” różnicach, gdyż mniejszych różnic wystarczyłoby co najmniej na cykl książkowy. Nie mam zamiaru tu jednoznacznie stawiać się po którejkolwiek ze stron. Oba frameworki powstały z zupełnie innych pobudek i w zupełnie innych celach. Wybór odpowiedniego frameworka pozostawiam już wam, choć niezależnie od decyzji jestem przekonany, że będziecie zadowoleni.