1. Widok-kontroler

zobacz aplikację >>  :: projekt w ZIP

1. osobny index - w środku redirect lub forward do odpowiedniego skryptu (nagłówek location i funkcja include)
2. Podział widok, kontroler (calc_view.php, calc.php)
3. PRACA WŁASNA: Dorobienie kalkulatora kredytowego (podać kwotę, ile lat i oprocentowanie, liczyć miesięczną ratę)

 

2. Ochrona zasobów

zobacz aplikację >>  :: projekt w ZIP

1. Widok i kontroler logowania
2. Ochrona każdej strony
3. PRACA WŁASNA: Dorobienie ochrony dla kalkulatora kredytowego

 

3. Szablonowanie

zobacz aplikację >>  :: projekt w ZIP

 

Uproszczony widok >>  :: projekt w ZIP

 

1. Użycie include do podziału wspólnych części
2. PRACA WŁASNA: Stworzenie innego szablonu dla kalkulatora kredytowego (tylko dla własnych ćwiczeń)

 

Szablonowanie Smarty >>  :: projekt w ZIP

 

Uproszczony widok >>  :: projekt w ZIP

 

1. stworzenie szablonu ogólnego z podziałem na bloki (zawartość domyślna)
2. szablony szczegółowe z definicją zawartości bloków
3. PRACA WŁASNA: Stworzenie szablonu dla kalkulatora kredytowego

 

Szablonowanie Twig  :: projekt w ZIP

1. stworzenie szablonu ogólnego z podziałem na bloki (zawartość domyślna)
2. szablony szczegółowe z definicją zawartości bloków
3. PRACA WŁASNA: Stworzenie szablonu dla kalkulatora kredytowego

 

4. Obiektowość

Zobacz aplikację >>  :: projekt w ZIP


Uproszczony widok >>  :: projekt w ZIP

 

1. Obiekt danych formularza oraz danych transferowych do widoku (model) (CalcForm.class.php, CalcResult.class.php, Messages.class.php)
2. Skrypty akcji użytkownika: (index.php, calc.php) - (stworzenie obiektu kontrolera, wywołanie odpowiednich metod)
3. Obiekt roboczy kontrolera: (CalcCtrl.class.php)

a. konstruktor (przygotowanie pól - właściwości)
b. metoda pobierająca parametry (pobranie i wstępne przetworzenie parametrów)
c. metoda walidacji danych
d. metoda wyświetlenia widoku
e. metoda wykonująca pracę

4. Obiekt widoku (skrypt CalcView.tpl - szablonowanie smarty)

 

MODEL: CalcForm.class.php, CalcResult.class.php, Messages.class.php (biblioteczna)
CONTROLLER: CalcCtrl.class.php (oraz ewentualnie index.php i calc.php)
VIEW: CalcView.tpl

Skrypty uruchamiane przez użytkownika (index.php, calc.php) to tylko punkty wejścia aplikacji (jedyne możliwe akcje użytkownika). Określają funkcjonalność aplikacji poprzez odpowiednie wywołanie potrzebnych metod kontrolerów.

Klasy kontrolerów stanowią zbiór "narzędzi użytkowych". Ich wywołanie przez zdalnego klienta nie daje żadnego rezultatu, ponieważ zawierają definicje klas => obiekt nie zostanie utworzony i uruchomiony. Poza tym klient musiałby odgadnąć ich nazwy (wygenerowany widok zawiera jedynie odwołania do skryptów wejścia: tu index.php i calc.php)

5. PRACA WŁASNA: Stworzenie klas dla kalkulatora kredytowego

 

5. Kontroler główny (jeden punkt wejścia)

Zobacz aplikację >>  :: projekt w ZIP


Uproszczony widok >>  :: projekt w ZIP

 

1. Nowy skrypt: kontroler główny - jeden punkt wejścia do aplikacji

a. akcje użytkownika określone wartością parametru, a nie nazwą skryptu jak dotychczas.
b. wywołanie poszczególnych metod klas w razie potrzeby

2. Dodawanie metod do klas kontrolerów

3. Bezpieczeństwo

a. kod ochrony dostępu może znajdować się w jednym miejscu (patrz kolejny przykład)
b. należy umożliwić wywołanie tylko kontrolera i pobranie zasobów publicznych (style, grafiki)

4. PRACA WŁASNA: Implementacja strony głównej z menu oraz akcji dla kalkulatora kredytowego

 

5a. Nowa struktura (początek organizacji frameworka)

:: projekt w ZIP

1. Nowa struktura i rozszerzenia:

a. init.php - nowy skrypt inicjujący system (do tej pory był tylko config.php)
b. reorganizacja folderów (szczególnie dla kontrolerów i widoków)
c. kilka drobnych pomocy, które jakże ułatwią życie :-)

Ogólnie, wersja ta przygotowuje strukturę do dalszego elastycznego rozwoju naszego budzącego się frameworka. Po pierwsze należało uporządkować i ułatwić ładowanie często wykorzystywanych obiektów jak konfiguracja, mesages oraz smarty - dlatego stworzono init.php. Ponadto dodano nowy skrypt functions.php, który będzie stopniowo się rozwijał zawierając pomocnicze funkcje dostępne dla użytkowników frameworka. Porządkując zmieniono również lokalizację niektórych istniejących wcześniej skryptów oraz stworzono dedykowane lokalizacje dla kontrolerów i widoków z szablonami.

 

5b. Przestrzenie nazw i automatyczne ładowanie klas

:: projekt w ZIP

 

1. Rozszerzenia:

a. Nowa klasa ClassLoader wykorzystująca spf_autoload_register(...) do automatycznego ładowania klas
b. Wszystkie klasy znajdują się w przestrzeniach nazw odpowiadających lokalizacji w podfolderach
c. niewielka reorganizacja folderów

 

6. Ochrona zasobów w modelu z kontrolerem głównym

Zobacz aplikację >>  :: projekt w ZIP

 

1. Kontrola logowania w jednym punkcie wejścia aplikacji - kontrolerze głównym
2. Brak konieczności ochrony innych skryptów. Chronione akcje są wybrane w kontrolerze.
3. Kontroler logowania teraz w wersji obiektowej z widokiem w Smarty (LoginCtrl.class, LoginView)

 

6a. Ochrona zasobów - zautomatyzowanie wywołania kontrolera z ochroną na podstawie roli

:: projekt w ZIP

 

1. Nowa funkcja automatyzująca wywołanie kontrolera - kolejne uproszczenie
2. Zautomatyzowanie zapisywania roli w sesji - odpowiednie funkcje pomocnicze
3. Integracja wywołania kontrolera z kontrolą uprawnień na podstawie roli - ogromna wygoda
4. Dodatkowe funkcje pomocnicze do pobierania parametrów oraz przekierowań - wygoda, wygoda, wygoda

 

6b. Routing

:: projekt w ZIP

 

Zamiana funkcji pomocniczej, automatyzującej wywołanie kontrolera, na obiekt routera.
Idea dokładnie ta sama, jednak rozwiązanie bardziej profesjonalne.

 

7. Projekt bazo-danowy (biblioteka Medoo)

Zobacz aplikację >>  :: projekt w ZIP

:: skrypt tworzący bazę danych

Rozbudowanie inicjalizacji/konfiguracji o łączenie z bazą danych z użyciem niewielkiej biblioteki Medoo, obudowującej obiekt PDO.

 

8. Framework "Amelia"

Zobacz aplikację >>  :: projekt w ZIP

 

Ostateczna wersja frameworka. Od tej pory występuje nawet ze swoją nazwą "Amelia".

Wszystkie przedstawione wcześniej idee zostały zachowane. Kolejne zmiany dotyczą:

  1. przeniesienia zasobów publicznych (zasoby html, jak css, js, obrazy ...) do podfolderu 'public'. Do tego folderu powinno się podpinać domenę - względy bezpieczeństwa.
  2. wprowadzenia przyjaznych linków (tzw. clean lub pretty URL's)
  3. Dostęp do obiektów podstawowych został zamknięty w klasie App, poprzez metody statyczne
  4. Dodano kilka klas pomocniczych otaczających uprzednie funkcje pomocnicze (skrypt functions.php znika). Są to klasy dobrane odpowiednio do zadań: ParamUtils, SessionUtils, RoleUtils oraz Utils
  5. Pobieranie parametrów oraz ich walidację ułątwiono jeszcze bardziej wprowadzając klasę Validator, pozwalającą w łatwy sposób przeprowadzić walidację parametru pod różnymi aspektami i generowanie odpowiednich komunikatów.

 

8a. Projekt bazo-danowy (projekt 8 we frameworku Amelia + clean URLs)

Zobacz aplikację >>  :: projekt w ZIP

:: skrypt tworzący bazę danych (ten sam)

Funkcjonalność projektu 8 przeniesiona do frameworka Amelia. Użycie clean-urls oraz nowego podejścia do Messages (jak we frameworku).

 

8b. Projekt bazo-danowy + podstawy AJAX

Zobacz aplikację >>  :: projekt w ZIP

:: skrypt tworzący bazę danych (ciągle ten sam)

Projekt pokazuje podstawy AJAXa, wykorzystując tę samą aplikację bazodanową. Szczegóły wprowadzonych nowych elementów opisane zostały w kontrolerze głównym.