Autor wpisu: batman, dodany: 28.11.2014 12:00, tagi: php
Przez bardzo długi czas byłem zapalonym zwolennikiem Zend Frameworka. Prawie każdy projekt PHP, jaki wychodził spod mojej ręki, oparty był o ten framework. Czas mijał, kolejne projekty powstawały, a framework się starzał, więc z ogromną niecierpliwością wypatrywałem kolejnej jego wersji. Niestety wraz z pojawiającymi się betami i RC, zniechęcałem się do tego frameworka coraz bardziej. Problemy z ZF2 spowodowały, iż zacząłem rozglądać się za alternatywą. Po kilku miesiącach testów różnych frameworków, wygrał Laravel.
Bardzo zadowolony ze swojego wyboru, zacząłem tworzyć kolejne projekty w tym frameworku i każda kolejna realizacja, utwierdzała mnie w przekonaniu, że był to dobry wybór. Najnowszą stabilną wersję (4.2) poznałem całkiem dobrze, gdy doszły mnie informacje, że niedługo światło dzienne ujrzeć ma wersja 5. Jak się okazało, termin listopadowy nie zostanie dotrzymany i możemy spodziewać się wydania Laravela 5 dopiero w styczniu, niemniej już teraz warto wiedzieć czego się spodziewać.
- Nowa struktura katalogów
- Nowe generatory
- Adnotacje route'ów
- Adnotacje zdarzeń
- Kontrakty
- Formularze
- Helpery
- Middleware
- Harmonogramowanie zadań
Nowa struktura katalogów
W obecnej wersji frameworka, zdecydowana większość kodu znajduje się w katalogu app. Znajdziemy w nim konfigurację, testy, kontrolery, wersje językowe, magazyn na pliki, cache, sesje, itp. Wszystkie te elementy są niezbędne do działania aplikacji, jednak nie koniecznie powinny znajdować się w katalogu aplikacji. Twórcy frameworka doszli do takich właśnie wniosków i przenieśli większość tych katalogów do głównej gałęzi projektu. Teraz w katalogu app znajdują się jedynie kontrolery, modele, klasy odpowiedzialne za konsolową część aplikacji (wcześniej znajdowały się w katalogu commands, teraz jest to Console) oraz providery . Zmiana zaszła również w filtrach, które nie są już przechowywane w jednym pliku. Zamiast tego, każdy filtr to osobna klasa. Nowa struktura katalogów wygląda następująco:
Kolejną nowością w Laravel 5 jest obecność folderu Middleware. Przy pomocy klas tego typu będziemy w stanie napisać wrappery dla requestów i odpowiedzi na nie. Upraszczając nieco ich rolę, będzie to nowy sposób tworzenia filtrów, które nie są bezpośrednio związane z logiką aplikacji.
Jeśli przyjrzeliście się powyższej grafice, na pewno zauważyliście, że pojawił się folder resources. Od wersji 5 będzie on miejscem, w którym przechowywane będą widoki, pliki językowe oraz zasoby takie jak np. pliki sass.
Nowe komendy wiersza poleceń
Wiersz poleceń we frameworku Laravel doskonały nie jest. Mimo iż wiele przy jego pomocy można uzyskać (na pewno więcej niż w przypadku Zend Frameworka), do doskonałości jeszcze mu trochę brakuje. Piąta wersja frameworka wprowadza kilka zmian, dzięki którym łatwiej się będzie poruszać w konsoli. Najbardziej rzucającą się w oczy zmianą jest utowrzenie wspólnej przestrzeni dla generatorów. Od piątej wersji dostępna będzie komenda make, z poziomu której będziemy tworzyć kontrolery, migracje, itd. Pojawił się generator schedule pozwalający na ustawienie zadań cyklicznych (napiszę o tym więcej przy okazji jednego z kolejnych wpisów poświęconych temu frameworkowi). Dodane zostały również kolejne komendy do zarządzania route'ami. Również publikacja została zaktualizowana i teraz publikowanie zasobów czy plików konfiguracyjnych zostało przeniesione do publish:.
Adnotacje route'ów
Nie jestem fanem adnotacji, zwłaszcza w PHP, ponieważ zaciemniają one obraz aplikacji, a źle używane mogą spowodować ból głowy u każdej osoby, która chce debugować nie swój kod. Z drugiej strony, jeśli mamy bardzo dużą aplikację z ogromną ilością route'ów, trzymanie ich wszystkich w jednym pliku na pewno spowoduje bałagan. Niestety złotego środka nie ma, więc wszystko zależy od zdrowego rozsądku programistów oraz od narzędzi z jakich korzystają. Laravel 5 pozwala tworzyć adnotacje w kontrolerach i na ich podstawie generuje route'y do naszej aplikacji.
Korzystanie z adnotacji jest banalnie proste. W podstawowej wersji wygląda następująco: