Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> [PHP5] Framework dla najmłodszych, PHP5, OOP, "MVC"
hwao
post
Post #1


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Jako że mi się troche nudziło, a pozatym chce sobie napisać na szybko prostą strone napisałem bardzo prostego frameworka w php.

Główne zalozenia to do pisania prostych stronek blog/ksiega gosci/wyswietlanie roznych danych. Jest napisany tak zeby nie miec burdelu w kodzie i w miare ładnie to rozpisane, czyli nie mieszkac warstwy biznesowej z szablonami.

Zip: http://hwao.strefaphp.net/poligon/framework.zip
Source online: http://hwao.strefaphp.net/subdomains/repos...-php5/index.php
<span style="font-style: italic;">Po lewej <span style="font-weight: bold;">framework-php5</span></span>...

Postanowiłem pokazać, może jakiemus poczatkujacemu programiscie troche rozjasni w głowie, jak zwykłe czekam na pytania - chetnie odpowiem.

Oczywiscie jak coś będe pisał to kod sie bedzie rozbudowywał, wiec bede wrzucał poprawione czesci, jezeli ktos coś dopisze to też może pokazać - chetnie dodam.

Pozdrawiam

Poprawiłem linki, do źródeł
Go to the top of the page
+Quote Post
vieri_pl
post
Post #2





Grupa: Zarejestrowani
Postów: 406
Pomógł: 9
Dołączył: 24.07.2005
Skąd: Bydgoszcz

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


juz jest ok (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Mialem ustawione php 4 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)


thx hwao za przyklady !

Ten post edytował vieri_pl 25.02.2006, 18:08:43
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~vieri_pl to jest kod pod php5
A po błędzie widzę, że chyba masz wcześniejszą wersję.
Go to the top of the page
+Quote Post
hwao
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Dobra dodam jeszcze dziś WebRequest:

  1. <?php
  2.  
  3. /**
  4.  * WebRequest
  5.  * 
  6.  * @author Paweł `hwao` Halicki
  7.  * @version 1.0.0
  8.  */
  9.  
  10. if( !defined( 'SECURITY' ) ) {
  11. die( 'SECURITY' );
  12. }
  13.  
  14. class WebRequest {
  15. /**
  16.  * Obiekt WebRequest
  17.  *
  18.  * @var object WebRequest
  19.  */
  20. static private $WebRequest = null;
  21.  
  22. /**
  23.  * Dane żądania
  24.  *
  25.  * @var array
  26.  */
  27. private $_GET = array();
  28. private $_POST  = array();
  29. private $_COOKIE = array();
  30.  
  31. /**
  32.  * Klucze
  33.  *
  34.  */
  35. const GET = 1;
  36. const POST  = 2;
  37. const COOKIE = 3;
  38.  
  39. /**
  40.  * Czy sa "magniczne znaki" :) czyli zmora kazdego (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
  41.  */
  42. protected $bMagicQuotes = true;
  43.  
  44. /**
  45.  * Konstruktor
  46.  *
  47.  */
  48. protected function __construct() {
  49. //- Celowo referecja, nie usuwam tych danych chyba ze ktos chce to niech przerobi
  50. $this->_GET = & $_GET;
  51. $this->_POST  = & $_POST;
  52. $this->_COOKIE = & $_COOKIE;
  53.  
  54. // unset( $_GET, $_POST, $_COOKIE );
  55. $this->bMagicQuotes = get_magic_quotes_gpc();
  56. }
  57.  
  58. /**
  59.  * Wyjmowanie interesujacego nas parametru :)
  60.  *
  61.  * @param string $sKey - co nas interesuje
  62.  * @param string/int $mFrom - gdzie szukac get/post/cookie
  63.  * @param bool $bHtml - czy maja byc znaczniki html'a escejpowane
  64.  * @param bool $bDatabase - czy dane beda zapisywane w bazie danych
  65.  * @param string $sSyntax - dodatkowe formatowanie
  66.  * @return string/array
  67.  */
  68. public function getParam( $sKey, $mFrom = self::GET , $bHtml = false, $bDatabase = false, $sSyntax = null ) {
  69. switch( strtolower( $mFrom ) ) {
  70. case self::GET:
  71. case 'get':
  72. case 'g':
  73. return $this->prepareParam( $this->getVars( $this->_GET, $sKey ), $bHtml, $bDatabase, $sSyntax );
  74. break;
  75. case self::POST:
  76. case 'post':
  77. case 'p':
  78. return $this->prepareParam( $this->getVars( $this->_POST, $sKey ), $bHtml, $bDatabase, $sSyntax );
  79. break;
  80. case self::COOKIE:
  81. case 'cookie':
  82. case 'c':
  83. return $this->prepareParam( $this->getVars( $this->_COOKIE, $sKey ), $bHtml, $bDatabase, $sSyntax );
  84. break;
  85. default:
  86. return null;
  87. break;
  88. }
  89. }
  90.  
  91. /**
  92.  * Zwraca wartosc
  93.  *
  94.  * @param array $aArray
  95.  * @param string $sParam
  96.  * @return mix
  97.  */
  98. private function getVars( $aArray, $sParam ) {
  99. return array_key_exists( $sParam, $aArray ) ? $aArray[$sParam] : null;
  100. }
  101.  
  102. /**
  103.  * Przygotowanie danych
  104.  *
  105.  * @param string/array $mParam
  106.  * @package bool $bHtml
  107.  * @param bool $bDatabase
  108.  * @param string $sSyntax
  109.  * @return string/array
  110.  */
  111. private function prepareParam( & $mParam, & $bHtml, & $bDatabase, & $sSyntax ) {
  112. if( is_array( $mParam ) ) {
  113. foreach( $mParam As $sKey => $mValue ) {
  114. $mParam[$sKey] = $this->prepareParam( $mValue, $bHtml, $bDatabase, $sSyntax );
  115. }
  116. return $mParam;
  117. }
  118.  
  119. if( $this->bMagicQuotes == true ) {
  120. $mParam = stripslashes( $mParam );
  121. }
  122.  
  123. if( $bHtml == true ) {
  124. $mParam = htmlentities( $mParam, ENT_COMPAT, 'UTF-8' );
  125. }
  126.  
  127. if( $bDatabase == true ) {
  128. $mParam = mysql_escape_string( $mParam );
  129. }
  130.  
  131. if( !is_null( $sSyntax ) ) {
  132. $mParam = sprintf( $sSyntax, $mParam );
  133. }
  134.  
  135. return $mParam;
  136. }
  137.  
  138. /**
  139.  * Pobranie instancji
  140.  * 
  141.  * @return object WebRequest
  142.  */
  143. static public function Get() {
  144. if( is_null( self::$WebRequest ) ) {
  145. return self::$WebRequest = new WebRequest();
  146. }
  147. return self::$WebRequest;
  148. }
  149. }
  150. ?>


Służy do obslugi tego co klient nam wysyla (zostały jeszcze $_FILES ale to osobny obiekt)...

Uzycie
Żądanie: http://strona.pl/?hwao='cos%20%3Cb%3Eb...#39;%jazda'
Typ żądania : GET

Kod php:
  1. <?php
  2.  
  3. $Request = WebRequest::get();
  4. $getHwao = $Request->getParam( 'hwao', 'Get', true );
  5.  
  6. var_dump( $_GET['hwao'] );
  7. var_dump( $getHwao );
  8.  
  9. ?>

Wyniki:
Kod
'\'cos <b>bold</b>Where `hwao` Like \'%jazda\'' (length=45)
''cos &lt;b&gt;bold&lt;/b&gt;Where `hwao` Like '%jazda'' (length=54)


Warto zapoznac sie z sposobem pobierania zmienych:
  1. <?php
  2. $getHwao = $Request->getParam( 1, 2, 3, 4, 5 );
  3. ?>


Na przykladzie $_GET['hwao']

1 - wymagana - klucz jakiego szukamy czyli unas 'hwao'
2 - gdzie szukamy - domyslnie GET
GET = WebRequest::GET lub string 'get' lub 'g' wielkosc liter obojetna
Analogicznie z Post WebRequest::POST 'post' 'p' i cookie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
3 - nie wymagany - True/False - czy chcemy zastapic na encje kod html, domyslnie FALSE
4 - nie wymagany - True/False - czy kod bedzie zapisywany w bazie danych (usuwanie znacznikow zagrazajacych naszemu sql (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ) domyslnie FALSE
5 - nie wymagany - String - mozemy chciec jakos ekstra zformatowac zmienna składnia sprintf().

To narazie tyle ide coś zjeść (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Całość jest dostepna jako OS wiec róbta co chceta... ps milo by bylo zostawic informacje o autorze..
Go to the top of the page
+Quote Post
Bastion
post
Post #5





Grupa: Zarejestrowani
Postów: 505
Pomógł: 0
Dołączył: 8.01.2005

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


hm, ciekawa sprawa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) musze to przestudiowac
Go to the top of the page
+Quote Post
Vomit
post
Post #6





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


Mam pytanie: po co sa puste konstruktory? Jest jakas roznica od tego czy jest pusty konstruktor czy w ogole go nie ma?
Go to the top of the page
+Quote Post
ens0re
post
Post #7





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 23.08.2005
Skąd: Warszawa

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


Może głupie pytanie, ale jestem nie kumaty pewnie: Jak w ogole odpalić ten skrypt? Wyswietla mi sie tylko napis: Index a niżej 'hwao' i nic. Mam php5 itp. A katalogi i scieżki są raczej dobre.
Go to the top of the page
+Quote Post
hwao
post
Post #8


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Cytat(Vomit @ 2006-02-25 19:31:31)
Mam pytanie: po co sa puste konstruktory? Jest jakas roznica od tego czy jest pusty konstruktor czy w ogole go nie ma?

Wiekszego znaczenia to nie ma:
Ale dreklaruje je jako PUBLIC zeby bylo wiadomo jak bedzie tworzo ny obiekt.

Pozatym z doswiadczenia wiem, ze zazwyczaj przydaja sie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) np jak chce dodac WebRequest to w pliku WebController.php
  1. <?php
  2.  
  3. public function __construct() {
  4. //- Zalaczanie dodatkˇw :)
  5. include DIR_FW.'/WebRequest.php';
  6.  
  7. } 
  8. ?>

i wszytko smiga ładnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Jezeli mamy konstruktor PROTECTED/PRIVATE to musimy postawic jak w przypadku konstruktora WebRequest, czyli wymuszam tam ze ma byc tylko jeden obiekt:)


Cytat
Może głupie pytanie, ale jestem nie kumaty pewnie: Jak w ogole odpalić ten skrypt? Wyswietla mi sie tylko napis: Index a niżej 'hwao' i nic. Mam php5 itp. A katalogi i scieżki są raczej dobre.

Wszytko jest dobrze wiec pokoleji plik index.php
  1. <?php
  2. //-- Aplikacja
  3. $Application = new WebController();
  4. $Application->setAction( $_GET['action'], 'index' ); 
  5. ?>

W ostaniej linijce opokazanej tutajjest wybierany model jaki ma zostac uruchomiony, poniewaz system rozpozna ze w $_GET['action'] nic nie ma, badz tez wskazana akcja nie istnieje zostaje odpalona domyslna (czyli 2 parametr tej metody).

Odpala sie model/index.php
Tam w klasie Index masz metode Perform
  1. <?php
  2. public function Perform() {
  3. $this->Assign( 'text', 'hwao' );
  4. return true;
  5. } 
  6. ?>

Ktora poprostu wysyla dane do Szablonu ( $text = 'hwao' ) jako ze zadnego specjalnego wybierania szablonu nie zrobilismy zostaje odpalony plik templates/index.tpl
w ktorym mamy
  1. <h3>Index</h3>
  2. <?php echo $text; ?>

Rezultaty tego widzisz na ekranie

To jest prosty krzyklad jezeli chcilabym tam np wydobyc newsy to np robisz tak
model/news.php
  1. <?php
  2. class News extends Model {
  3. /**
  4.  * Uruchomienie Modelu, analiza danych
  5.  *
  6.  * @return unknown
  7.  */
  8. public function Perform() {
  9. $sSql = 'Select * From `news`';
  10. $rQuery = mysql_query( $sSql );
  11. $aNews = array();
  12. while( $a = mysql_fetch_assoc( $rQuery ) ) {
  13.  $aNews[] = $a;
  14. }
  15. $this->AssignByRef( 'aNews', $aNews );
  16. return true;
  17. }
  18. } 
  19. ?>


Teraz zgodnie z zalozeniami robimy takie cos, nie wybieramy w modelu szablonnu (mozemy to zrobic poprzez danie $this->sTemplate = 'jakis_plik.tpl' wtedy odpalony zostanie templates/jakis_plik.tpl)
Wiec toworzymy plik templates/news.tpl

i w nim np
  1. <?php foreach( $aNews As $iKey => $aVal ) { ?>
  2.  
  3. Autor: <?php echo $aVal['autor']; ?><br />
  4.  
  5. <?php } ?>

i mamy w wyswietlanie newsa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Oczywiscie do Widoku mozna podpiac np smarty wtedy szablony beda jeszcze prostrze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
ens0re
post
Post #9





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 23.08.2005
Skąd: Warszawa

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


Dzieki za info (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Vomit
post
Post #10





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


Hm, jaka jest zasadnicza ronizca miedzy polem private a protected?
Go to the top of the page
+Quote Post
scanner
post
Post #11





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Zacznij od: http://pl.php.net/manual/pl/language.oop5.visibility.php
Go to the top of the page
+Quote Post
hwao
post
Post #12


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Cytat(Vomit @ 2006-02-25 23:52:37)
Hm, jaka jest zasadnicza ronizca miedzy polem private a protected?

private/protect "widzi się" (ma sie dostep) tylko w klasie (w przeciwienstwie do public). Rożnica miedzy nimi jest taka ze private widzisz tylko w tej klasie gdzie jest zdeklatowane a klasa dziedziczaca nie ma juz do niej dostepu, w protected klasy dziedziczace maja do niej dostep.

Tak jak napisal Scanner masz wiecej na ten temat w tym linku\ i nie potrzeba znajomosci specjalnej angielskiego, wystarczy przyklad
Go to the top of the page
+Quote Post
Vomit
post
Post #13





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


Ok, dzieki. Wyczytałem wszystko czego nie wiedzialem.

PS. Hwao: czemu zastosowales tutaj Singleton?
Go to the top of the page
+Quote Post
sf
post
Post #14





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


Cytat(Vomit @ 2006-02-26 11:42:43)
Ok, dzieki. Wyczytałem wszystko czego nie wiedzialem.

PS. Hwao: czemu zastosowales tutaj Singleton?

To chyba oczywiste, że żądanie jest jedno. Więc powinien być jeden obiekt. Jak sobie wyobrażasz stworzenie dwócyh obiektów, które operują na $_GET ? Zwłaszcza jeśli zrobusz unset($_GET) ... to kolejny obiekt do czego się odwoła? Do pustej tablicy? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
hwao
post
Post #15


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Dokładnie dlatego jak powiedział sf (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Request w php jest jeden (czyli wysyłanie zadania do serwera-najczęściej Apache), nie tak jak w innych językach, typu c++ gdzie aplikacja pracują cały czas.

Dlatego za stosowne uważam użycie Singleton'u w całym systemie jest jedna żądanie wiec i obiekt powinien być jeden, dodatkowym plusem jest łatwość do jego dostępu, lecz i tu się spotyka rożne opinie. Niektórzy uważają że lepiej jest przekazywać Request jaka jakaś właściwości, w jakimś obiekcie, dzięki temu trafia zawsze tam gdzie jest potrzeby do użycia (w praktyce).

Z własnego doświadczenia przypuszczam, że jakbym obiekt był możliwy do utworzenia przez new WebRequest co mniej doświadczeni użytkownicy po prostu by tworzyli za każdym razem nowa instancje obiektu co mija sie z celem, a Singleton wymusza poprawną. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Vomit
post
Post #16





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


WebRequest to jest to samo co httpRequest?
Go to the top of the page
+Quote Post
aleksander
post
Post #17





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


na to wygląda=] ale hwacz musial sie wygryzc i nazwac to inaczej:P
Go to the top of the page
+Quote Post
hwao
post
Post #18


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Cytat(Vomit @ 2006-02-26 15:34:01)
WebRequest to jest to samo co httpRequest?

Tak "to samo"

Cytat
na to wygląda=] ale hwacz musial sie wygryzc i nazwac to inaczej:P

httpRequest to wiecej liter od WebRequest pozatym lepiej chyba zapamietac WebRequest pozatym -> WebController wiec analogicznie mamy request Web, do konsoli mozna dopisac ConsoleRequest i ConsoleController
Go to the top of the page
+Quote Post
Vomit
post
Post #19





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


hwao: moglbys pokazac jakis przykład z akcja a nie tylko z modelem. Bede bardzo wdzieczny.
Go to the top of the page
+Quote Post
hwao
post
Post #20


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Cytat(Vomit @ 2006-02-26 17:18:18)
hwao: moglbys pokazac jakis przykład z akcja a nie tylko z modelem. Bede bardzo wdzieczny.

jak tylko znajde chwile to dopisze obsluge akcji.
Go to the top of the page
+Quote Post
Strzałek
post
Post #21





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


O hwao widzę szpanuje swoim cackiem.

Jak będę w domu to oblokam, teraz jestem odcięty od net'a (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

btw: Repository - dokładnie taki sam projekt mam u mnie na kompie - zbarałeś mi pomysł (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

edited

eeeeee, to nie ten WF co myślałem. Nie doczytałe do końca (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
eh (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował Strzałek 3.03.2006, 12:24:18
Go to the top of the page
+Quote Post
TomASS
post
Post #22





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


Dzięki Hwao, mam zamiar zabrać się za frameworki i obcykać z czym to się 'je'. Twój FrameWork, jest (chyba) prościutki do zrozumienia, więc się za niego zabrałem.

Jeśli dobrze skumałem, to działa on mniejwięcej tak:
1. Uruchamiamy plik index.php
2. W nim tworzymy WebController:
  1. <?php
  2.  
  3. $Application = new WebController();
  4.  
  5. ?>

3. Gdy dajemy:
  1. <?php
  2.  
  3. $Application->Execute();
  4.  
  5. ?>

Min. tworzy nam się "model":
  1. <?php
  2.  
  3. $Model = new $this->sAction();
  4.  
  5. ?>

4. w nim "szykuje się" template:
  1. <?php
  2.  
  3. $this->sTemplate = strtolower( get_class( $this ).'.tpl' );
  4.  
  5. ?>

5. Gdy dajemy:
  1. <?php
  2.  
  3. $Application->Display();
  4.  
  5. ?>

To wczytujemy plik tpl i "wypełniamy" go.



Mam kiklka pytań:
1. Co nam daje stala SECURITY:
  1. <?php
  2. if( !defined( 'SECURITY' ) ) {
  3. die( 'SECURITY' );
  4. }
  5. ?>

2. Co to jest w WebControl.:
  1. <?php
  2. public function & Display( $bReturn = false ) 
  3. ?>

Chodzi mi tutaj o:
A: & przed Dispaly
B: $bReturn = false jako paramert

3. Po co jest:
  1. <?php
  2. include $sTemplate;
  3. return ob_get_contents();
  4. ?>

Nie mogło by być same:
  1. <?php
  2. include $sTemplate;
  3. ?>


Wielkie dzięki za roziwanie wątpliwości (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #23





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Moze nie jestem hwao ale znam kilka odpowiedzi (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Cytat
1. Co nam daje stala SECURITY:

Z tego o pamietam to jest tylko po to zeby nie otwierac pozostalych plikow *.php w przegladarce (SECURITY jest definiowane w index.php, taki old skulowy trick (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) ), ale jest to niepotrzebne gdy caly skrypt jest uruchamiany $app->execute a w pozostalych *.php nie ma zadnego kodu poza definicjami klas (i ew. stalych). A jak przerzucisz te pozostale *.php do katalogu poza DocumentRoot to tez nie masz problemu.


  1. <?php
  2.  
  3. public function & Display( $bReturn = false ) {
  4. $sTemplate = DIR_TPL.'/'.$this->sTemplate;
  5.  
  6. if( file_exists( $sTemplate ) ) {
  7. if( $bReturn == false ) {
  8. extract( $this->aVars );
  9. include $sTemplate;
  10. }
  11. else {
  12. include $sTemplate;
  13. return ob_get_contents();
  14. }
  15. }
  16.  
  17. ?>

Cytat
A: & przed Dispaly
Oznacza to ze funkcja zwraca referencje do obiektu/zmiennej a nie sama jej wartosc >> szczegoly w manualu.

Cytat
B: $bReturn = false jako paramert

jesli $bReturn === true to funkcja zwroci ci szablon, jesli false to tylko go wyswietli (tak jak w smarty: fetch/display; moglem nazwy pomylic bo z rok go nie uzywalem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) )


A ja sie przyczepie do kodu
  1. <?php
  2. if( $bReturn == false ) {
  3. ...AAA
  4. }
  5. else {
  6. ..BBB
  7. }
  8. ?>

nie prosciej (mniej kodu i bardziej naturalne)
  1. <?php
  2. if( $bReturn ) {
  3. ...BBB
  4. }
  5. else {
  6. ..AAA
  7. }
  8. ?>

?
Go to the top of the page
+Quote Post
hwao
post
Post #24


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Postaram sie to bardziej dopracowac, dodac obsluga akcji i z tego co pamietam to bardzo uboga byla tam obsluga modeli i widoku + brak akcji.

Jak tylko znajde to troche czasu, to napisze i przedstawie tutaj kod.

Co do WF narazie nie udostepniam zrodel.

dr_bonzo dobrze odpowiedzial na pytania.
Go to the top of the page
+Quote Post
splatch
post
Post #25





Grupa: Zarejestrowani
Postów: 487
Pomógł: 7
Dołączył: 7.01.2004
Skąd: Warszawa

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


  1. <?php
  2. public function & Display( $bReturn = false );
  3. ?>

Ten kod spowoduje wyświetlenie błędu i i tak nie zwróci referencji.. dlaczego? Referencja wskazuje na obszar pamięci zadeklarowany już dla jakiejś zmiennej - czyli działa ona tylko na zmiennych.. i dlatego nie zadziała tutaj:
Funkcja zwraca void (null) jeśli nie ma szablonu.
W przypadku kiedy return = false zwracane jest void (null).
Jeśli funkcja ma zwrócić wartość - jest ob_get_contents() - funkcja.
Tak na prawdę to & nic nie daje, jest hm.. dla picu.
Go to the top of the page
+Quote Post
hwao
post
Post #26


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




@splatch w php 5.1 wywala error jak cos ma & a nie zwraca referecji, skad ten znaczek bo ta metoda miala isc pod rozbudowe ale niestety nie starczylo czasu... w nastepnej wersji bedzie tam dodane pare "trick'ów"
Go to the top of the page
+Quote Post
Strzałek
post
Post #27





Grupa: Przyjaciele php.pl
Postów: 384
Pomógł: 6
Dołączył: 11.09.2004
Skąd: Grodzisk Mazowiecki

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


Cytat
Dzięki Hwao, mam zamiar zabrać się za frameworki i obcykać z czym to się 'je'. Twój FrameWork, jest (chyba) prościutki do zrozumienia, więc się za niego zabrałem.


Zainteresuj się Cake. To dobry framework mvc.
A to co hwao przedstawił to prosta rzecz do prostych rozwiązań (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował Strzałek 14.03.2006, 10:17:29
Go to the top of the page
+Quote Post
MagnuM
post
Post #28





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


Prosiłbym o informację czy 'projekt' jest jeszcze rozwijany ? Byłbym zainteresowany ;-)

[scanner] Następnym razem proszę użyć PW.
Go to the top of the page
+Quote Post
hwao
post
Post #29


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Tak jest rozwijany, juz powstała 3 wersja
Go to the top of the page
+Quote Post
Turgon
post
Post #30





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


Ja nigdzie nie widzę nowych źródeł.
Go to the top of the page
+Quote Post
hwao
post
Post #31


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Źródeł narazie nia mam czasu udostępnić, tzn o tyle ile udostępnić moge to bez opisania ich nie wiem czy dało by sie co kolwiek zrozumiec (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Troche bardziej rozbudowany jest niz pierwsza wersja, pisałem na nim sklep internetowy i roznego rodzaju strony.
Go to the top of the page
+Quote Post
MagnuM
post
Post #32





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 7.05.2004
Skąd: Jelenia Góra

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


Ja nalegam... chociażby bez opisywania.
Go to the top of the page
+Quote Post
Turgon
post
Post #33





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


O to wrzucaj hwaosz...
Go to the top of the page
+Quote Post
tuner
post
Post #34





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 10.12.2004

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


Cytat(Turgon @ 1.08.2006, 18:12:47 ) *
O to wrzucaj hwaosz...
Przyłączam się do prośby Pana Turgona (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Chętnie zobaczę kolejną wersję tego małego frameworka.
Go to the top of the page
+Quote Post
hwao
post
Post #35


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Akurat ftp mi siadl, ale jak tylko powstanie to wrzuce i dam linka.

Swoja droga to kod juz nie jest taki malutki, ale pare projektow na nim powstało. Wrzuce tutaj 3cia wersje z ktorej korzystałem. Aktualnie pracuje nad nowa, juz 4 wersja ale to nadal dopiero dev w fazie rozwoju.

Och, chyba zrobimy inaczej - inny ftp (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Niestety aktualnie nie mam dostepu do wersji z wszyskimi dodatkami (DataGrid, ect) ale mysle ze do projktow wystarczy tyle.

http://hwao.netstrefa.com.pl/repo/WindForc...mework3.0.0.zip

Kod nie do konca idealny (raczej wlaczyc sie nie wlaczy, poniewaz nie przygotowalme pod to przykladu, ale widac co mniej wiecej jak dziala).


Kod był na początku pisany żeby pokazać początkującym, ale okazało się że jest na tyle dobry że można go użyć do większości projektów i trochę go rozbudowałem.
Go to the top of the page
+Quote Post
Turgon
post
Post #36





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


Ciekawe. Przejrzałem źródła i zastanawiam się dlaczego router jest pusty.

Przejżenie go dostarczyło mi inspiracji przy pisaniu swojego FrameWorka. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post
hwao
post
Post #37


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Stwierdzilem ze sie nie przyda w tamtym projekcie. Mialem go dopisac ale radzilem sobie bez niego (wiec poco dodawac kolejna bez uzyteczna rzecz:) ).

W aktualnej wersji w Routerze jest tylko metoda odpowiedzialna za pasrowanie request'u (pobieranie info jaki kontroler i akcja) i generowanie linkow (praktycznie nie uzywane, poniewaz nie potrzebnuje - ew, bede pisal filtr podczas komplilacji szablonu).
Go to the top of the page
+Quote Post
Turgon
post
Post #38





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


Po co ci przy kompilacji szablonu ?
Go to the top of the page
+Quote Post
hwao
post
Post #39


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




Jest tam smarty poniewaz moj autorski system szablonow jest nadal testowany, a podmiana to kwestia paru chwil. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

W tym projeckie wowalem stosowac system szablonow, w aktualnym nie widze takiej potrzeby
Go to the top of the page
+Quote Post
Turgon
post
Post #40





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


Hmmm... Odbiegając troche od tematu, bo sam piszę frameworka i zastanawiam sie nad implementację systemu szablonów. Co o tym myślisz ?
Ja myślę nad klasą abstrakcyjną View pod którą podpinam system szablonów.
I jest jeszcze sprawa kompilacji jego... Jak skrypt dowie się jak go skompilować i kiedy i który szablon. Jakieś pomysły ?
Go to the top of the page
+Quote Post
ARJ
post
Post #41





Grupa: Zarejestrowani
Postów: 453
Pomógł: 22
Dołączył: 20.09.2004
Skąd: Kraków - NH -

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


@hwao mógłbyś podać jakieś proste wykorzystanie twojego frameworka. coś co by poprostu zaprezentowało co jak działa. proszę o to ponieważ zacząłem pisać własnego frameworka i już na poczatku wysiadłem. przeczytałem atykuł Frameworki dla php i z jego natchnienia napisałem bardzo podobny front controller do tego z artykułu. jednak teraz pojawia się problem ponieważ nie mam logicznie ułożonego działania reszty aplikacji. może twój framework mi wytłumaczy jak to ma działać, tylko sam kod bez przykładu użycia jakoś mi niewiele mówi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Prph
post
Post #42





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

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


Cytat(Turgon @ 2.09.2006, 06:57:54 ) *
Hmmm... Odbiegając troche od tematu, bo sam piszę frameworka i zastanawiam sie nad implementację systemu szablonów. Co o tym myślisz ?
Ja myślę nad klasą abstrakcyjną View pod którą podpinam system szablonów.
I jest jeszcze sprawa kompilacji jego... Jak skrypt dowie się jak go skompilować i kiedy i który szablon. Jakieś pomysły ?


Widok w MVC warto zrobic tak jak mowisz... Zwyczajnie tworzysz klase View, ktora ma odpowiednie metody. Chyba najwazniejsze, to:

1. setTemplate($sTemplate),
2. fetch(),
3. display(),
4. set($sParam, $mValue),
5. get($sParam).

Wazne jest (moim zdaniem), aby widok nie dziedziczyl np. ze smarty bezposrednio. No chyba ze odpowiadaja Ci oryginalne metody takie jak display() ze smarty.

Nie bylbym soba, gdybym nie powiedzial, ze czyste szablony php sa wygodne, najszybsze, a klasa obslugujaca taki szablon zajmuje kilkadziesiat linii kodu.

W zasadzie ukonczylem swoj framework Rapide. Postaram sie zamiescic niebawem kod.

Adrian.
Go to the top of the page
+Quote Post
Turgon
post
Post #43





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


Słuszna uwaga. Po prostu chyba zrobie własny prosty i szybki system szablonów w php.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.12.2025 - 22:25