Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nawyki projektowe
Forum PHP.pl > Forum > PHP
uirapuru
Nie wiem, czy jest to do końca ważne co dokładnie projektuje, ale chciałbym, żebyście skorygowali mój tok myślenia.

1) mam sobie kilka rodzajów includeów,
a) wszystko zapisane jako .php i objete w <? ?> (np. ustawienia skryptu na zasadzie $zmienna = "wartosc' (rzeczy typu hasla do bazy, loginy, inne wartosci)
cool.gif podobnie na zasadzie define('BLAD', opis); porobione komunikaty
c) w jednym includzie funkcje, w drugim klasy
d) chce docelowo includowac plik html, za pomocą str_replace podmieniac ciagi %%tutaj_cos%% na odpowiedzi skryptu (czy lepiej tak jak w joomli wykonywac w odpowiednich miejscach templatu odpowiednie funkcje?questionmark.gif?

2) index.php includuje wszystko, zawiera sobie glowny obiekt oraz switche akcji (index.php?akcja=cos_tam i cos_tam jest case'm)
3) logowanie i zmienne oparte na sesjach, ale poprostu ustawiam zmienne jak "logged in" itp, nie wiem czy wymagany jest inny mechanizm, logowanie porownuje jedynie hashowane md5 hasło z zahashowanym hasłem z bazy
4) wszystkie $_GET i $_POST przed obrobka przejezdzam rekurencyjna funkcja z strip_slashes itp
5) komunikacja z baza wyglada tak, ze tworzony jest obiekt mysql, ktory nawiazuje przy tworzeniu polaczenie, a reszta odbywa sie za pomoca mysql_query, ale cos czuje, ze chce zrobic to tak, ze dla kazdej tablicty bedzie osobna klasa z rodzajem metody tablica.set_costam(wartosc)

dajcie znac, czy ide w dobra strone
okitoki
a) nie dokońca, jak zaczynasz łańcuch " to tym samym go kończysz, podobnie sprawa ma się do '
d) polecam smarty

2) ja bym to zrobił w całości w OOP, dodatkowo użył bym mod_rewrite

a do reszty nie mam uwag smile.gif
uirapuru
Cytat(okitoki @ 6.05.2009, 05:13:35 ) *
a) nie dokońca, jak zaczynasz łańcuch " to tym samym go kończysz, podobnie sprawa ma się do '
d) polecam smarty

2) ja bym to zrobił w całości w OOP, dodatkowo użył bym mod_rewrite

a do reszty nie mam uwag smile.gif


@a) - literówka winksmiley.jpg

@d) przejrze sobie w koncu to smarty, bo nie pierwszy raz mnie ten temat atakuje, ale tak na szybko: na jakiej zasadzie dziala wtedy to co moj skrypt wywala (czy robie jakies przechwytywanie bufora, czy wywalam odp do zmiennych?) a potem podpiecie tego pod templatke?

a juz widze, czyli ustawiam sobie poprostu zmienne obiektu smarty... proste jak budowa gwoździa smile.gif

@2) tzn. bawic sie w rzeczy typu serwer/wyswietlanie == serwer/index.php?akcja=wyswietl ?
okitoki
w smarty ładujesz wszystkie informacje do tablicy, następnie podpinasz szablon, a w samym szablonie można sporo zrobić też smile.gif
a jeżeli chodzi o mod_rewrite, to tworzysz kontener, który będzie wykonywany jak na podanym adresie nie będzie pliku

.htaccess
Kod
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /controller.php [L]
</IfModule>


controler.php
Kod
$lokalizacja = $_SERVER["REQUEST_URI"];
$page = explode('/',$lokalizacja);
.......

interpretujesz adres jak Ci wygodnie pozbywasz się ?& i innych śmieci na rzecz htto://www.costam.pl/costam/costam

smarty
Kod
require_once 'lib/Smarty.class.php';
$sm = new Smarty();
$sm->assign('witaj',"Witaj");
$sm->display('index.html');


templates/index.html
Kod
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="Keywords" content="{$keywords}" />
<meta name="Description" content="" />
<meta name="Robots" content="index, follow" />
<meta name="Revisit-After" content="1 day" />
<meta name="Page-Topic" content="{$pagetopic}" />
<meta name="Rating" content="General" />
<title>{$page_head}</title>
</head>
<body>
{$witaj}
</body>
</html>


w smarty można sporo rzeczy robić a modyfikacja templatki modyfikuje wygląd strony, chociaż tu lepiej użyć XHTML i CSS
uirapuru
no tak, to musze poprostu o tym wiecej poczytac potem. jak sie domyslam serwer/skrypt/arg1/arg2/arg3 mam potem do eksplodowania z adresu? czy od razu jako zmienne sa w skrypcie dostepne?
.radex
Cytat
c) w jednym includzie funkcje, w drugim klasy


To nie ma być tak, że jest podzielone ze względu na rodzaj (typ/klasa), tylko ze względu na przeznaczenie, np. w DB.php znajdują się klasy i funkcje związane z bazą danych. Chociaż to może był zły przykład, bo nie powinno się dawać kilku klas w jednym pliku, bo wprowadzają zamieszanie, no chyba, że są krótkie.

Cytat
d) chce docelowo includowac plik html, za pomocą str_replace podmieniac ciagi %%tutaj_cos%% na odpowiedzi skryptu (czy lepiej tak jak w joomli wykonywac w odpowiednich miejscach templatu odpowiednie funkcje?questionmark.gif?


Użyj jakiegoś gotowego systemu szablonów winksmiley.jpg

http://pornel.net/szablony
okitoki
jeszcze jedno jest ważne

smarty musi mieć jeden katalog do zapisu
domyślny jest templates_c na nim ustaw odpowiednie prawa

Cytat(uirapuru @ 6.05.2009, 07:36:29 ) *
no tak, to musze poprostu o tym wiecej poczytac potem. jak sie domyslam serwer/skrypt/arg1/arg2/arg3 mam potem do eksplodowania z adresu? czy od razu jako zmienne sa w skrypcie dostepne?


używasz explode, dla ciebie taki adres to źródło informacji dla innych jest czytelny smile.gif

Cytat(.radex @ 6.05.2009, 07:38:02 ) *
To nie ma być tak, że jest podzielone ze względu na rodzaj (typ/klasa), tylko ze względu na przeznaczenie, np. w DB.php znajdują się klasy i funkcje związane z bazą danych. Chociaż to może był zły przykład, bo nie powinno się dawać kilku klas w jednym pliku, bo wprowadzają zamieszanie, no chyba, że są krótkie.


dobry pomysł, możesz w katalogu /DB umieścić klasy obsługi baz danych, zmiana informacji w konfiguracji może spowodować że twój projekt będzie obsługiwał różne silniki bazodanowe

Cytat(.radex @ 6.05.2009, 07:38:02 ) *
Użyj jakiegoś gotowego systemu szablonów winksmiley.jpg
http://pornel.net/szablony


dla czego nie, wiele projektów na nim zrobiłem, i sobie go chwale smile.gif
uirapuru
Cytat(okitoki @ 6.05.2009, 05:48:26 ) *
dobry pomysł, możesz w katalogu /DB umieścić klasy obsługi baz danych, zmiana informacji w konfiguracji może spowodować że twój projekt będzie obsługiwał różne silniki bazodanowe


dżizys, znaczy mam sobie zrobic katalog /db_mysql na przyklad i kazda klase zapisywac w osobnym pliku a potem to includeowac jakimś dir i w pętli dla kazdego pliku?questionmark.gifquestionmark.gif? bo na moj gust stykloby zrobic jeden plik dla mysql, jeden dla postgresa itd... i zunifikowac jedynie nazwy klas i metod a w konfigu podawac nazwe pliku... dobrze mysle?
okitoki
możesz też zrobić np

mysql.php
Kod
class mysql
{


}


potem można zrobić include uniwersalne w funkcji autoload, już nie muszisz robić include(......) tylko robić $sql = new mysql(); a skrypt dołączy ci sam odpowiedni plik klasy

jak coś raz zrobisz dobrze w OOP, to możesz to potem wykorzystywać w wielu swoich projektach i z modyfikacjami takich projektów też potem nie ma problemu
uirapuru
kurde, 10 minut czytania waszych postow i rece sie trzesa do nowego pisania biggrin.gif za duzo tego php, zeby sie na pamiec nauczyc, a jeszcze wlasnie kwestia odpowiednich rozwiazan. szukalem czegos takiego jak wzorce projektowe, ale one sa raczej w skali ogolnej niz szczegolnej, chodzi mi np. o temat: "jak sie pisze bezpieczne logowanie do serwisu i bezpiecznie obsluguje sesje". niby proste, ale ilu programistow tyle rozwiazan. albo obsluga ciasteczek itd. czy sa jakies gotowe standardy i wzorce programistyczne?
Zyx
1. Sprawa sesji - tak, są powszechnie znane techniki ich zabezpieczania i pewne standardy ich tworzenia. Kiedyś powstało "PHP Security Consortium"... coś szybko się wykruszyło, ale zostawiło po sobie całkiem interesujący dokument dotyczący m.in. sesji: http://phpsec.org/projects/guide/

2. Przejeżdżanie $_GET oraz $_POST przez stripslashes() - nie rób tak! Słowem kluczowym jest tutaj: magic_quotes, ty powinieneś pisać skrypty tak, jakby było ono wyłączone, a usuwać slashe tylko wtedy, gdyby włączone było. W PHP6 opcja ta zniknie i będziesz w kropce, bo Twój skrypt będzie do przeróbki.

3. Nie pisz nowej klasy do komunikacji z bazą danych od zera, tylko skorzystaj albo z czystego PDO, albo z rozwiązania bazującego na nim. Stare rozszerzenia, o ile są już w PDO zaimplementowane zamienniki, nadają się właściwie tylko na śmietnik. Przy okazji PDO automatycznie dostosowuje się do ustawień magic_quotes.

4. Kwestia systemu szablonów - Smarty ma tę zaletę, że jest popularny, ale w sumie od lat stoi w miejscu i od strony składni szablonów nie błyszczy - idzie mocno w stronę "tradycyjnego" programowania, więc i tak trzeba się namęczyć, by cokolwiek bardziej zaawansowanego napisać, do tego pozmieniał dobrze funkcjonujące rozwiązania programistyczne (komu przeszkadzało wywołanie funkcji w stylu f(x) ?) i nie ma zbyt wiele narzędzi do modularyzacji i wielokrotnego wykorzystania tego samego kodu. W ogóle temat systemów szablonów jest o wiele bardziej złożony, pełno tutaj różnych mitów i pseudoporównań (np. widziałem już "porównania" typu "Smarty"-jakiś framework, i to robione przez naprawdę znających się na rzeczy programistów (!)). Kiedyś w jakiś rodzaj systemów szablonów i tak będziesz musiał wejść, więc może warto poczytać parę rzeczy na ten temat:

http://pornel.net/szablony - już podany wyżej, trochę przydałoby mu się odświeżenia, ale ogólnie OK
http://www.zyxist.com/pokaz.php/uzyteczne_systemy_szablonow
http://phpedia.pl/wiki/Systemy_szablonów
uirapuru
Cytat(okitoki @ 6.05.2009, 05:36:27 ) *
w smarty ładujesz wszystkie informacje do tablicy, następnie podpinasz szablon, a w samym szablonie można sporo zrobić też smile.gif
a jeżeli chodzi o mod_rewrite, to tworzysz kontener, który będzie wykonywany jak na podanym adresie nie będzie pliku

.htaccess
Kod
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /controller.php [L]
</IfModule>


controler.php
Kod
$lokalizacja = $_SERVER["REQUEST_URI"];
$page = explode('/',$lokalizacja);
.......

interpretujesz adres jak Ci wygodnie pozbywasz się ?& i innych śmieci na rzecz htto://www.costam.pl/costam/costam


rozumiem, ze zamiast controller.php moge od razu dac index.php? czy przekierowanie robic z pliku "obok" i zmienne przewalać dopiero do index.php i przekierowywac tam z uzyciem header() ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.