{#przemyslaw.kudlacik}

pkudlacik at gmail dot com, przemyslaw dot kudlacik at us dot edu dot pl

Przykładowe projekty

  1. Widok, kontroler ::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, liczć miesięczną ratę)

  2. Ochrona zasobów ::projekt w ZIP

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

  3. Proste szablonowanie ::projekt w ZIP
    Uproszczony widok ::projekt w ZIP

    1. Użycie include do podziału wspólnych cześci
    2. PRACA WŁASNA: Stworzenie innego szablonu dla kalkulatora kredytowego

  4. Szablonowanie Smarty ::projekt w ZIP
    Uproszczony widok ::projekt w ZIP

    1. stworzenie szablonu ogolnego z podzialem 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 ogolnego z podzialem na bloki (zawartość domyślna)
    2. szablony szczegółowe z definicją zawartości bloków
    3. PRACA WŁASNA: Stworzenie szablonu dla kalkulatora kredytowego

    5. 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

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

    Zobacz aplikację ::projekt w ZIP
    Uproszczony widok ::projekt w ZIP

    1. Nowy skrypt: kontrolera głównego - 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

    6a. 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 elestycznego rozwoju naszego budą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ł zawierajac 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.

    6b. 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. Wszystkei klasy znajdują się w przestrzeniach nazw odpowiedających lokalizacji w podfolderach
    c. niewielka reorganizacja folderów

    7. 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)

    7a. 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

    7b. 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.

    8. 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 bibliteki Medoo, obudowującej obiekt PDO.

    Framework "Amelia"

    Zobacz aplikację
    ::projekt w ZIP

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

    Wszystkie przedstawione wczesniej 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óznymi aspektami i generowanie odpowiednich komunikatów.

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

    Zobacz aplikację
    ::projekt w ZIP

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

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

    9b. 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.