Posts tagged Framework

PHP 5.3.3 i konstruktor

Podczas pracy nad frameworkiem napotkałem na bardzo dziwny błąd (jak mi się wtedy wydawało). Miałem klasę “Index” i metodę “index”. Podczas tworzenia instancji klasy ciągle mi się uruchamiała automatycznie ta metoda. Doszedłem chyba po 2 godzinach do tego, że to nie błąd tylko feature. Już tak dużo czasu minęło, że zapomniałem, że PHP traktuje metody o takiej samej nazwie jak klasa jako jej konstruktor. Trochę mnie to załamało, bo moje MVC jest oparte o takie założenie, a twórcy PHP zostawili taką możliwość jako wsteczną kompatybilność.

Na szczęście doczytałem, że od wersji PHP 5.3.3 zmieniło się zachowanie szukania konstruktorów i teraz tego typu metoda traktowana jest jako zwykła metoda a nie jako konstruktor. Uff!

Nowy projekt – Luna

Luna logoLuna to nazwa mojego nowego projektu. Jest to (podobnie jak GRAD) framework PHP. Luna jest dedykowana do zastosowań bardziej profesjonalnych.

Założenia polegają m.in. na wyciągnięciu wszystkiego co najlepsze z istniejących rozwiązań i wkomponowanie ich w jeden prosty i szybki framework (podobnie jak GRAD tylko, że bardziej pro). Główne założenia:

  • MVC
  • Modele danych
  • Kontrolery i akcje
  • Obsługa błędów i zdarzeń
  • Benchmark
  • Router

To tyle z najważniejszych rzeczy. Luna będzie bardziej rozbudowana co nie znaczy wolniejsza niż GRAD. Najważniejsze z punktu widzenia projektowego będzie stworzenie elastycznego routera i sensownego modelu danych.

Szczegóły i historia opracowania projektu znajduje się w dziale Projekty

Nowy GRAD komponent: Form

Zawziąłem się w sobie i w końcu postanowiłem zrobić porządnie i wygodnie znienawidzonego przeze mnie elementu w programowaniu stron WWW: formularzy.

Poszperałem, poczytałem i mnie więcej doszedłem do ogólnego zarysu i idei. Składnia powinna nieco przypominać tę z framework’a Zend – jednakże mechanizm działania opiera się zupełnie na innej zasadzie.

Założenia są następujące: Ma być szybko, prosto i automatycznie.

Pierwsza wersja ukaże się wraz z wersją 0.4, o której pisałem już jakiś czas temu. Wersja 0.4 obfitować będzie przede wszystkim w:

  1. Optymalizację funkcji i metod zapytań
  2. System sekcji
  3. Komponenty (pierwszy z nich to wspomniany Form)
  4. Optymalizacje i uproszczenia w kodzie

W ogólnej postaci Grad Framework posiada już elementy wersji 0.3 i 0.4. Postaram się dokończyć założenia i w końcu opublikować działający kod – z którego będę zadowolony.

GRAD 0.3 – postępy

Ostatnio sprawy zawodowe przybrały mocno na sile przez co kompletnie nie miałem czasu zająć się stroną i projektami. Udało mi się jednak wdrożyć w framework system obsługi sekcji. Po tą “tajemniczą” nazwą kryje się bardzo prosta rzecz – a mianowicie: dodatkowy poziom drzewa katalogów. Obrazując to prościej:

W tej chwili przykładowy request:

/konto/logowanie

uruchomi kontroller kontoController i funkcję logowanieAction. To czego mi brakowało to pewien dodatkowy abstrakcyjny stopień grupowania funkcjonalności – i tak narodziło się pojęcie sekcja. Przykładowo:

tworzę katalog o nazwie “autor” i wewnątrz niego dopiero tworze kontrollery:

controllers/
—- indexController.php
—- kontoController.php
—- panel/

—- autorController.php
—- ustawieniaController.php

itd. W ten sposób można zgrupować pewne duże fragmenty funkcjonalności nie zabierając miejsca w kontrolerze – który przecież ma odpalać się błyskawicznie – bez przedzierania się przez setki niepotrzebnych kilobajtów. Zatem odpalenie jakiejś funkcji w sekcji mogłoby wyglądać tak:

/panel/autor/aktywacja

i to wszystko. Prosta rzecz a jakże przydatna. System sam znajduje czy dana “sekcja”  istnieje – jeśli tak to korzysta z danego poziomu drzewa.

GRAD “drobne” zmiany

Postanowiłem dokonać przebudowy systemu modeli. Zasada działania będzie podobna, natomiast zmieni się nieco podejście i idea – mam nadzieję, że bardziej sensowna. Chciałbym odróżnić pojęcia “wynik” i “model”. W tej chwili “model” staje się wynikiem po pobraniu jednego wiersza, a po pobraniu wielu wierszy jest tylko listą wyników. Jest to mylące. Poza tym potrzebna jest większa konfiguracja klucza głównego. Należy poprawić integrację z PDO (w tej chwili mało logiczne jest “debugowanie” – gdyż do pdo odwołanie jest bezpośrednie. Poprawić trzeba mechanizm wyjątków, gdy uruchamiany jest z innego typu requesta (np tekstowego), poprawić system podstron zastępczych, np: “nie znaleziono strony” – czyli jak widac szykują się zmiany i poprawki, które zobaczymy w wersji 3.5 – kiedy? Mam nadzieję, że wkrótce 🙂

GRAD i AJAX

Podczas tworzenia frameworka zastanawiałem się jak najprościej i najwygodniej zrobić w frameworku obsługę ajaxa. Wymyślałem i wymyślałem i w końcu przyszło mi do głowy rozwiązanie najprostsze z możliwych: “Nie wymyślać nic”.

Przygotowałem artykuł w którym przedstawiam wady i zalety pewnych rozwiązań oraz sposób użycia AJAX’a korzystając z frameworka GRAD.

Zapraszam serdecznie do artykułu i jak zwykle czekam na Wasze komentarze.

Framework i framework…

Przy okazji budowy własnego frameworka warto zapoznać się z już istniejącymi aby wykorzystać/podpatrzeć dobre pomysły i unikać jak ognia tego co jest złe 🙂 Kilka najpopularniejszych:

Prado jest bardzo rozbudowanym i eleganckim frameworkiem, jednak przeznaczony jest dla naprawdę cierpliwych i dobrze zaznajomionych z nim ludzi. Pisanie w Prado wymaga jednak nauczenia się w zasadzie całkowicie nowego języka. Nie zmienia to faktu, że Prado zapewnia obsługę praktycznie każdego elementu strony jaki przyjdzie nam stworzyć… no ale coś za coś. Polecam go osobom, które pisały w ASP.NET – poczują się jak w domu. Na stronie znajduje się też całkiem fajny kurs.
Prado: http://www.pradosoft.com
Kurs: http://www.pradosoft.com/documentation

Zend jest stale rozwijającym się frameworkiem i przechodzi bardzo gruntowne zmiany. Do niedawna pojawiały się spekulacje, że pisanie w Zend jest jak samobójstwo ponieważ tak intensywnie się zmienia. Dziś mamy już stabilną wersję, ktorą można pobrać ze strony producenta i śmiało pisać. Niestety nie ma wielu “kursów” ale za to na stronie znajduje się pełna dokumentacja.
Zend: http://framework.zend.com
Kurs: http://framework.zend.com/manual/videos

Symfony jest frameworkiem bardzo dobrze udokumentowanym i posiadającym bogatą bazę wiedzy, przykładów i kursów. Programista dosyć często korzystać musi z konsoli wywołań skryptów do różnych operacji (np budowanie modelu danych (Prado też to potrafi), tworzenie szablonu projektu wraz z operacjami CRUD ). Dzięki temu można zautomatyzować proces projektowania z procesem wdrożenia. Nie ma potrzeby robić modelu bazy danych w kodzie projektu a potem “grzebać” w bazie danych. Można to jednym poleceniem zsynchronizować. Symfony ma dosyć sztywną strukturę katalogów co osobiście mi się podoba bo wymusza porządek w kodzie. Åšwietnym pomysłem jest uruchamianie programu w środowisku developerskiem – wystarczy w kodzie nie odwoływać się do index.php tylko np do frontend_dev.php. Taka operacja uruchomi nasz kod wraz z ładną konsolą z raportami, informacjami o serwerze, o połaczeniach z bazą danych itd – świetne narzędzie. Podsumowując: Symfony wydaje się czerpać to co najlepsze z obu rozwiązań dlatego warto przyjrzeć mu się bliżej.
Symfony: http://www.symfony-project.org
Kurs: http://www.symfony-project.org/doc/1_0/

Jeżeli znajdziecie jakieś fajne kursy do w/w możecie je zamieścić w komentarzu a ja je dodam 🙂

Mimo wszystko Zend Framework jest bardziej przyjazny programiście PHP, gdyż w zasadzie nie tworzy żadnych nowych “magicznych” języków. Jest to po prostu zbiór całkiem fajnych klas i funkcji, które ktoś napisał za nas – i to osobiście bardziej mi odpowiada. Symfony z kolei usprawnia wiele procesów i je automatyzuje… czasami wręcz bez pisania ani jednej lini kodu PHP na etapie projektowania – co tak naprawdę jest dobrym rozwiązaniem ponieważ kapsułkuje rozwiązania i rozwiązuje zamysł projektowy – potem dopiero zaczyna się właściwe pisanie kodu. Prado jest bardzo fajnym frameworkiem, ale zdecydowanie potrzeba dużo czasu na jego opanowanie. Zend wydaje się w miarę prosty ale brakuje w sieci przykładów przez co ciężko go opanować. Symfony wydaje się czerpać plusy z obu tych rozwiązań – pozostawiając jednocześnie programiście wolną rękę -mimo wszystko jednak, potrzeba dużo czasu na jego opanowanie.
Jeżeli czas pozwoli to postaram się przeprowadzić parę kursów z różnych frameworków dla osób, które chciałyby się czegoś nauczyć – czas pokaże 🙂

Pozdrawiam i do usłyszenia wkrótce.

Go to Top