Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Framework] Rapide Framework, Framework MVC dla aplikacji PHP5
Prph
post
Post #1





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Rapide Framework




Rapide Framework powstał na bazie rozwiązań stosowanych w kilku frameworkach. Organizację i sterowanie w dużej mierze oparto na Zend Framework. Kierowałem się przede wszystkim prostotą. Mojavi (tym bardziej Symphony) jest moim zdaniem zbyt rozległe. Po całej aplikacji krążą obiekty kontekstów, kontrolera głównego... Nie, nie - to nie jest to, czego szukałem.

Całe sterowanie w Rapide powierzono małemu i elastycznemu Front Kontrolerowi. Jądro podzielono na jak najmniejsze części pozwalające w przyszłości na szybką ich wymianę.

Na pierwsze spojrzenie Rapide działa identycznie jak Zend Framework. Jednak po głębszym zapoznaniu się z frameworkiem, okazuje się, że Rapide jest znacznie wygodniejsze.

Przede wszystkim Rapide poprawnie implementuje widok z MVC. W każdej chwili możemy zamienić widoki, aby prezentowane dane ukazały się np. w formacie CSV.

Ponadto wiele czynności zostało zautomatyzowanych, dzięki czemu nie musimy wczytywac konfiguracji do akcji, czy też martwić się o kontrolę dostępu.

Cechy frameworka
  • Implementacja MVC
  • Obsługa pomocników i appletów w widoku dzięki czemu szybko zamieścimy w aplikacji stałe elementy (takie jak menu) w pełni funkcjonalne (funkcjonalność zbliżona do kontrolera).
  • Kontrola dostępu na podstawie ACL i grupy użytkowników. Konfigurację przeprowadza się w pliku konfiguracyjnym kontrolera i polega ona na zdefiniowaniu grup, które mają dostęp lub nie.
Biblioteki dostarczane przez Rapide
  • Rapide_Controller
    Klasa bazowa dla kontrolerów. Zawiera szereg aliasów skracających czas tworzenie kontrolera.
  • Rapide_View
    Klasa widoku implementująca szablony php. Rapide dostarcza prostą
    oraz rozszerzoną klasę widoku, pozwalającą na dekorowanie treści o elementy stałe (np. stopka, menu).
  • Rapide_User
    Klasa danych sesyjnych. Umożliwia autentyfikacje użytkownika oraz składowanie danych w sesji.
    Zastępuje standardową tablicę $_SESSION. Umożliwia stosowanie handlerów, dzięki czemu sesja może
    być przechowywana w bazie danych.
  • Rapide_ACL
    Access Control List - system kontroli dostępu. Pozwala na definiowanie grup mająych dostęp (lub nie) do poszczególnych kontenerów (akcji).
  • Rapide_Registry
    Rejestr pozwalający na przechowywanie obiektów i wspódzielenie ich w całej aplikacji.
  • Rapide_Database_MySQL
    Sterownik bazy danych MySQL dostarczający prosty i szybki w użyciu interfejs zarządzający danymi w bazie.
  • Rapide_Language
    Prosta klasa języka. Dane przechowywane są w tablicach php.
  • Rapide_Validator
    Szereg klas z rodziny Rapide_Validator dostarczaja prostych i skutecznych mechanizmów
    walidacyjncyh dla danych.
  • Rapide_Form
    Klasa umożliwiająca szybki dostęp do danych przesłanych za pomocą formularzy. Obecnie bardzo skromna.
Zdaję sobie sprawę, że Rapide wcale nie musi być nadzwyczajnym frameworkiem. Napisałem go dla siebie. Zamieszczam go w sieci, ponieważ może przydać się osobom, które uczą się budowania frameworków.

Kod do pobrania: http://vgm.pl/adrianpawlikpl/rapide/

Tworzenie kontrolera

Kontrolery w aplikacji powinny dziedziczyć po abstrakcyjnej klasie Rapide_Controller. W zasadzie framework wymaga, aby kontrolery
implementowały interfejs Rapide_Controller_Interface.

Katalog kontrolerów definiowany jest w pliku konfiguracyjnym Rapide/config.php. Kontroler musi byź zapisany pod nazwą Kontroler.class.php.


Kontroler jest kontenerem dla wszystkich akcji. Dla przykładu: kontroler Nowosci będzie zawierał akcje Dodaj, Pokaz, Usun, Edytuj itd. Klasa kontrolera musi nosić nazwę Controller_Kontroler, natomiast metody będące akcjami - AkcjaAction.


Przykładowy kontroler

  1. <?php
  2. class Controller_Example extends Rapide_Controller
  3. {
  4. public function ExampleAction()
  5. {
  6. echo 'Example action from controller Example';
  7. }
  8. }
  9. ?>


Teraz wystarczy w przeglądarce wpisać adres: http://TwojAdres.pl/www/?controller=Exampl...;action=Example.
Rezultatem pracy frameworka będzie wyżej podany komunikat.

Metody klasy Rapide_Controller
Kontroler bazowy w Rapide został tak zaprojektowany, aby uprościć i przyśpieszyć budowę aplikacji. Poniższa lista zawiera metody, których warto używać:

getParameter($sParameter)
Zwraca parametr GET przekazany w adresie do kontrolera. W przypadku braku parametru wzraca null.


hasParameter($sParameter)
Zwraca wartość logiczną informującą, czy istnieje parametr GET przekazany w adresie.


getConfig()
Zwraca obiekt konfiguracji dla danego kontrolera. Dane konfiguracyjne pobierane są
z tablic php zapisanych w katalogu konfiguracji kontrolerów.


getView($sView)
Zwraca obiekt danego widoku. Widok pobierany jest z katalogu widoków.


getModel($sModel)
Zwraca obiekt wybranego modelu. Model pobierany jest z katalogu widoków.


getUser()
Zwraca obiekt User, który pozwala na zapis danych sesyjnych.


getLanguage()
Zwraca obiekt języka. Dane językowe dla kontrolera ładowane są wcześniej w pluginie
Rapide_Plugin_Language.


forward($sController = null, $sAction = null, array $aParameters = array())
Pozwala na określenie następnej akcji do wykonania. Pozostawienie wartości pustych spowoduje
forwarodwanie na domyślny kontroler.


redirect($sController = null, $sAction = null, array $aParameters = array())
Pozwala wykonać przekierowanie na inną akcję. Pozostawienie wartości pustych spowoduje
przekierowanie na domyślny kontroler.


Każdy kontroler posiada domyślną akcję Index. Jest ona wywoływana, jeżeli akcja nie zostanie
określona.


Przykładowe kody

Kontroler User - akcja zmiany hasla dla zalogowanego uzytkownika

  1. <?php
  2.  
  3. class Controller_User extends Rapide_Controller
  4. {
  5. public function PasswordAction()
  6. {
  7. $oForm = new Rapide_Form;
  8.  
  9. if(!$oForm->isSubmitted())
  10. return $this->getView('UserPassword');
  11.  
  12. $sPassword = $oForm->get('password');
  13. $sPassword2 = $oForm->get('password2');
  14.  
  15. if($sPassword != $sPassword2)
  16. {
  17. $aErrors[] = $this->getLanguage('Controller', 'User', 'Password', 'Error', 'Match');
  18.  
  19. $oView = $this->getView('UserPassword');
  20. $oView->errors = $aErrors;
  21.  
  22. return $oView;
  23. }
  24.  
  25. $iUser = $this->getUser()->id;
  26.  
  27. $oUser = $this->getModel('User');
  28. $oUser->load($iUser);
  29.  
  30. $oUser->password($sPassword);
  31. $oUser->save();
  32.  
  33. $this->redirect();
  34. }
  35. }
  36.  
  37. ?>


Widok i szablon widoku dla tej akcji

  1. <?php
  2. class View_UserPassword extends Rapide_View_Html_Extended
  3. {
  4. public function __construct()
  5. {
  6. $this->setTemplate('UserPassword');
  7. }
  8. }
  9. ?>


  1. <?php $this->title = $this->lang('Controller', 'User', 'Password', 'Title'); ?>
  2.  
  3. <h1><?= $this->lang('Controller', 'User', 'Password', 'Header') ?></h1>
  4.  
  5. <?php require_once('formErrors.inc.php'); ?>
  6.  
  7. <form action="" method="post">
  8. <p>
  9. <?= $this->lang('Controller', 'User', 'Password', 'Password') ?>: <br/>
  10. <input type="password" name="password">
  11. </p>
  12.  
  13. <p>
  14. <?= $this->lang('Controller', 'User', 'Password', 'Password2') ?>: <br/>
  15. <input type="password" name="password2">
  16. </p>
  17.  
  18. <p>
  19. <input type="submit" name="submit" value="<?= $this->lang('Form', 'Submit') ?>">
  20. </p>
  21. </form>


Jak już wspomniałem - framework napisałem dla siebie. Mam nadzieję, że komuś może się przydać, chociaż w celach edukacyjnych.

Pozdrawiam, Adrian J. Pawlik.

Ten post edytował Prph 5.11.2006, 19:56:50
Go to the top of the page
+Quote Post

Posty w temacie
- Prph   [Framework] Rapide Framework   7.09.2006, 01:59:05
- - Quickest   Świetny framework - podoba mi się... bar...   7.09.2006, 14:15:48
|- - Prph   Cytat(Quickest @ 7.09.2006, 13:15:48 ...   7.09.2006, 15:49:05
- - hwao   Wyglada praktycznie tak samo jak Zend Framework. K...   7.09.2006, 15:11:07
- - Turgon   Rzut na sam widok katalogów wygląda jak Zend. Pow...   7.09.2006, 15:26:20
- - splatch   Przede wszystkim - brak jakiejkolwiek dokumentacji...   7.09.2006, 18:13:49
- - Quickest   Nadal nie rozumiem, tych praw dostępu, mo...   7.09.2006, 18:18:32
|- - Prph   Wszystko przez to ze nie udostepnilem dokumentacji...   7.09.2006, 19:06:38
- - Quickest   Teraz już wszystko jasne jak słońce, gdy zobaczyłe...   7.09.2006, 21:41:51
- - Prph   W szablonie mamy możliwość uży...   8.09.2006, 09:07:52
- - NuLL   A tak na raty skaczac po plikach form.class.php ...   9.09.2006, 02:03:49
|- - Prph   Cytat(NuLL @ 9.09.2006, 01:03:49 ) ar...   9.09.2006, 07:58:36
- - hwao   Rapide_Util_Syntaxer_Php Zaskoczyłeś mnie... roz...   9.09.2006, 08:17:10
- - seaquest   Cytat(Prph)A tu mnie zaskoczyles (mile). O tym nie...   9.09.2006, 08:21:06
- - Prph   @hwao: dzieki za informacje. Mialem pozniej zabrac...   9.09.2006, 08:58:38
- - thornag   Ja am takie pytanie: Tutaj odwolujemy sie do meto...   11.09.2006, 12:37:02
- - Prph   Ad1. Przeoczenie. Powinno byc static. Dzieki. Ad2...   11.09.2006, 22:00:44
- - Apo   Prph a mógłbyś wyjaśnić bardziej działanie klasy R...   17.09.2006, 16:44:17
- - Prph   Widok rozszerzony sluzy do dekorowania tresci. Wez...   17.09.2006, 18:50:03
- - dzobert   Czy jest jeszcze jakieś miejsce skąd można pobrać ...   5.11.2006, 17:42:18
- - Prph   Witam! Przepraszam, za zly adres - skocznczyl...   5.11.2006, 19:56:05
- - darektbg   Witam Przeglądając kod wywnioskowałem, że obsługa...   10.11.2006, 16:08:16
- - envp   Świetnie, ale gdzie w Applecie dostęp do modelu?   11.11.2006, 16:48:15
- - Prph   @darektbg: Tak mniej wiecej to wyglada. Pracuje na...   12.11.2006, 10:52:14
- - envp   Zauważyłem pewną nieścisłość - aplet wywoływany z ...   12.11.2006, 15:35:27
- - Prph   Owszem, pluginy nie sa obslugiwane. Ale IMHO to ni...   30.11.2006, 10:35:45
- - J4r0d   Czy ktoś kto korzysta z svn mógłby pobrać nanowszą...   3.12.2006, 12:43:46
|- - Prph   Cytat(J4r0d @ 3.12.2006, 12:43:46 ) C...   3.12.2006, 20:08:14
|- - J4r0d   Cytat(Prph @ 3.12.2006, 20:08:14 ) W ...   3.12.2006, 20:42:08
- - dr_bonzo   A tak trudno w koncu zaczac korzystac z svn'a?...   3.12.2006, 13:41:20
- - Prph   Wyslalem nowe. Adrian. Wczoraj poprawilem kilka ...   4.12.2006, 12:35:36
- - AxZx   a masz moze przyklad aplikcji zbudowanej za pomoca...   3.01.2007, 16:21:54
|- - Prph   Cytat(AxZx @ 3.01.2007, 16:21:54 ) a ...   4.01.2007, 11:26:38
- - normanos   Czy Rapide ma aspiracje (i plany) stać się poważny...   10.01.2007, 19:48:09
|- - Prph   Cytat(normanos @ 10.01.2007, 19:48:09...   10.01.2007, 22:00:30
- - envp   Hm z tego co wiem to tworzą go 2 osoby, dodatkowo ...   10.01.2007, 21:32:50
- - normanos   Cytat(envp @ 10.01.2007, 21:32:50 ) H...   11.01.2007, 10:14:34
- - Turgon   Co do Forum i Dokumentacji ja mogę się tym zająć ...   11.01.2007, 10:25:38
- - Prph   Witam, Od lutego na pewno wiele sie zmieni. Zakon...   11.01.2007, 13:39:46
- - Turgon   Prph: Gdzie się zgłaszać:D?   12.01.2007, 10:37:07
|- - Prph   Cytat(Turgon @ 12.01.2007, 10:37:07 )...   12.01.2007, 13:59:05
- - normanos   to ja poczekam aż będzie już coś wiadomo z tych p...   12.01.2007, 14:18:39
- - krzyszbi   witam framework zapowiada się ciekawie ale mam dw...   12.01.2007, 14:41:40
|- - Prph   Cytat(krzyszbi @ 12.01.2007, 14:41:40...   13.01.2007, 22:23:12
- - envp   Witam, W projekcie Rapide ruszyło oficjalne forum...   12.01.2007, 20:56:05
- - normanos   super, tylko postawiliście by to na czymś porządny...   13.01.2007, 13:27:44
- - Turgon   Normanos: ja to im mówiłem, ale jak widać propozyc...   13.01.2007, 15:37:41
- - eS...   Czekam na forum i na jakieś przykłady/tutorial jak...   14.01.2007, 00:13:17
- - envp   Forum zostanie zmienione na inne w najbliższym cza...   14.01.2007, 01:59:27
- - Turgon   Zasadniczo na co ?   14.01.2007, 10:24:15
- - envp   Zasadniczo to powstał mały problem : myBB nie ma j...   14.01.2007, 10:31:11
|- - normanos   Cytat(envp @ 14.01.2007, 10:31:11 ) Z...   15.01.2007, 15:04:44
- - Turgon   myBB, ja mogę przetłumaczyć ;] Tylko trza będzie s...   14.01.2007, 10:35:53
- - envp   Nom, albo poczekać na polskie wsparcie... ;/   14.01.2007, 11:30:42
- - Turgon   Ono nigdy nie powstanie raczej, bo Polaki leniuchy...   14.01.2007, 19:39:39
|- - Prph   Cytat(Turgon @ 14.01.2007, 19:39:39 )...   14.01.2007, 20:42:53
- - Turgon   Ta jest panie generale Na jutro postaram si...   14.01.2007, 20:51:49
- - mike_mech   ~Prph, ~envp, ~Turgon jeśli nie potraficie so...   15.01.2007, 19:33:28
- - elem   ..... kawał dobrej roboty   16.01.2007, 02:20:57
- - Prph   Witam, Wczoraj przemianowaliśmy wersję ...   18.01.2007, 11:27:06
- - eS...   A kiedy powstanie dokumentacja, narazie robicie la...   18.01.2007, 14:44:14
|- - Prph   Cytat(eS... @ 18.01.2007, 14:44:14 ) ...   18.01.2007, 15:16:32
- - AxZx   mam takie pytanie, moze troche ogolne jaka przewa...   22.01.2007, 23:13:10
|- - Prph   Cytat(AxZx @ 22.01.2007, 23:13:10 ) m...   23.01.2007, 00:30:54
- - AxZx   troche skomplikowane to jezeli chcialbym zeby zami...   23.01.2007, 22:52:31
|- - Prph   Cytat(AxZx @ 23.01.2007, 22:52:31 ) t...   24.01.2007, 00:00:39
- - ikioloak   Na swojej stronie reklamujesz Rapide jako pierwszy...   24.01.2007, 13:56:16
|- - Prph   Cytat(ikioloak @ 24.01.2007, 13:56:16...   24.01.2007, 17:01:31
- - normanos   społeczność się zacznie jak będzie dokumentacja pr...   24.01.2007, 21:53:20
- - sf   http://www.mojavi.org/ - Rapid Framework (Mojavi 4...   28.01.2007, 09:28:29
|- - Prph   Cytat(sf @ 28.01.2007, 09:28:29 ) htt...   28.01.2007, 12:09:52
|- - mike_mech   Cytat(Prph @ 28.01.2007, 12:09:52 ) T...   30.01.2007, 20:24:07
|- - Prph   Cytat(mike_mech @ 30.01.2007, 20:24:0...   30.01.2007, 20:30:43
|- - mike_mech   Cytat(Prph @ 30.01.2007, 20:30:43 ) G...   30.01.2007, 20:33:05
- - bim2   Przyjżałem sie rapidowi, i on jest porpostu babast...   28.01.2007, 11:43:10
- - AxZx   Cytat(bim2 @ 28.01.2007, 11:43:10 ) P...   28.01.2007, 12:22:24
|- - Prph   Cytat(AxZx @ 28.01.2007, 12:22:24 ) m...   28.01.2007, 15:01:00
|- - normanos   Cytat(AxZx @ 28.01.2007, 12:22:24 ) m...   28.01.2007, 16:05:16
- - bim2   Przykro mi ale już to usunołe. Powie, tylko że nie...   28.01.2007, 13:30:44
- - AxZx   ja odnosilem sie do konktetnego posta, do posta uz...   28.01.2007, 20:34:39
- - Prph   Cytat(AxZx @ 28.01.2007, 20:34:39 ) w...   29.01.2007, 09:02:58


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:19