![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 325 Pomógł: 33 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
W ramach nauki obiektówki postanowiłem wykonać jakiś mały projekt, aby załapać podstawy. Po krótkim namyśle stwierdziłem, że napiszę sobie bloga. I teraz mam do was, bardziej doświadczonych, pytanie. Czy idę w dobrą stronę podczas skrobania tego projektu? Co robię źle, a co dobrze (o ile coś ![]() Poniżej przedstawiam to co napisałem do tej pory. Co prawda nie ma tego wiele. Głównie chodzi mi tutaj o klasę content.php oraz wpisy.php. index.php
header.php
footer.php
content.php
wpisy.php
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hmm ja ogólnie napiszę tylko, że nie podoba mi się mieszanie logiki z prezentacją. Spróbuj rozdzielić warstwę logiki (kodu php) od prezentacji (html). Możesz utworzyć dodatkowe pliki, w których będą same treści HTML i includować je w odpowiednich metodach klas. W ten sposób kod będzie bardziej przejrzysty.
Co do samej obiektowości to Twój kod wygląda tak jakby był wrzucany w obiekty na siłę - nie o to tu chodzi. Chodzi o to by obiekty do czegoś konkretnego służyły. Stwórz obiekt dostępu do bazy danych, na którym będziesz pracował, proponuje od razu przejść tu na PDO. Spróbuj też zastosować "małe MVC" to znaczy: - Twórz klasy, których zadaniem jest przetwarzanie danych - pobieranie z bazy danych, wrzucanie do bazy, manipulacja danymi w bazie, obróbka tych danych - to są modele, - Twórz klasy, które będą używały wyżej wspomnianych modeli przekazywały im dane oraz odbierały te dane i wyświetlały je ładując odpowiedni skrypt widoku (czyli plik pozbawiony logiki PHP, w którym jest sam HTML wraz z wyświetlaniem danych z modelu, pętlami itd.) - to są widoki, - Na końcu stwórz klasę/klasy, które będą obsługiwały dane żądanie. To oznacza że w adresie odwołujesz się do jakiegoś skryptu PHP a on już powinien wiedzieć jaki widok załadować czy jaką metodę modelu wykonać - to kontrolery Poczytaj odrobinkę o podstawach MVC - to dobry wzorzec wcale nie trudny a struktura aplikacji dzięki niemu jest przejrzysta Dla sytuacji gdy coś wyświetlasz (np. z bazy danych): Żądanie -> index.php -> (wybór odpowiedniego kontrolera aby obsłużyć żądanie) -> kontroler -> (sprawdzenie, przygotowanie parametrów, załadowanie modelu, widoku) -> odpalenie metody widoku -> widok pobiera dane z modelu i wyświetla odpowiedni skrypt z HTML uzupełniając go o te dane. Dla sytuacji zapisu do bazy z formularza: Żądanie -> index.php -> (wybór odpowiedniego kontrolera aby obsłużyć żądanie) -> kontroler -> (sprawdzenie, przygotowanie parametrów, załadowanie modelu) -> odpalenie metody modelu zapisujące dane -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Dołączę się do pytania czy konkretnie View musi pobierać dane z modelu czy mogę to zrobić już w kontrolerze i później przekazać do View?
Załóżmy, że View ma metodę, która uruchomi plik z szablonem i w pewne miejsca wstawi mi kod, więc uruchamiając view z kontrolera robię $view = new View($template, $vars), gdzie $vars to array zawierający pewne dane w formie: $vars = array ('title' => 'Tytuł', 'content' => 'Zawartość'); Wtedy w kontrolerze na podstawie danych z modelu tworzę ten array. Tak też jest dobrze? W sumie sposobów implementacji MVC jest cała masa... |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 298 Pomógł: 447 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
@up Obie formy są poprawne. Jednak większość preferuje kontroler który pobiera dane z modelu i przekazuje je do widoku.
Do tego co napisał Sephirus dodałbym, abyś zainteresował się autoloaderami SPL, bo pisanie za każdym razem w plikach include, jest bez sensu. Ten post edytował !*! 21.02.2013, 10:16:11 -------------------- Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta). |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@up to ja dorzucę jeszcze trochę z off-topic ale do zapoznania się z OB (ob_start itd) - przydaje się przy widokach i lepszej kontroli nad wyświetlanymi treściami
Co do sposób z tym modelem i widokiem... MVC ogólnie w najbardziej STRICT wersji wymusza aby kontroler nie ruszał modelu w zasadzie w ogóle jeśli uzywa widoku. Czyli: Jeśli mamy akcję, która coś wyświetla to kontroler powinien przygotować parametry requestu, wywołac odpowiedni widok i ewentulanie wg niego powinien robić jakieś przekierowania itd.. sam widok powinien już wiedzieć jakie modele załadować i uzywać. W przypadku gdy mamy jakiś zapis do bazy itp kontroler przekazuje dane do modelu ktory je zapisuje, bez pośrednictwa widoku. Niedopuszczalne wg STRICT MVC jest skolei przeniesienie funkcjonalności widoku na kontroler - sam jednak bardzo często robię od tego małe odstępstwa - to nie zbrodnia - chodzi jedynie o to by nad tym panować ![]() -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 325 Pomógł: 33 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jak na razie staram się przejść na PDO i odnośnie tego mam pytania.
Mam taką oto klasę korzystającą z PDO. Klik Mniej więcej wiem jak z niej korzystać. Zastanawiam się jednak nad jedną rzeczą przy wykonywaniu zapytań.
Co kryje się pod zmienną $bind? Czy korzystając z tej klasy mogę być pewniejszy, jeżeli chodzi o kwestie bezpieczeństwa danych? Ten post edytował kamil_lk 21.02.2013, 22:50:36 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 155 Pomógł: 17 Dołączył: 13.03.2006 Skąd: Jaworze Ostrzeżenie: (0%) ![]() ![]() |
hi
jesli chodzi o pdo i bindowanie polecam: http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO (nie złośliwie ) na przykladach najlepiej zobaczyć o co chodzi. jesli chodzi o programowanie OO to też mialem klopoty by to wszystko zalapac kupilem wiec ksiażkę , ktorą polecam zawsze coś tzrba miec wiedzy niemniej jest jatwiej z dobrymi przykladami i wzorcami ZF http://zend-framework.gajdaw.pl/html/menu/moje-ksiazki.html pozdr.K |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 325 Pomógł: 33 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Z mojej analizy wynika, że bindowanie służy tak jakby do "filtracji" danych. Jeżeli się nie mylę to kolejne pytanie, a właściwie to samo.
Jak zastosować to w moim przykładzie z wykorzystaniem np. metody select(), która posiada 4 parametry, tj. $table, $where="", $bind="", $fields="*". Normalnie zapytanie wykonuję w ten sposób:
Jak wykorzystywany jest 3 parametr, kiedy się go używa i w ogóle co się do niego wprowadza? A co do książek, to którą polecasz, aby załapać podstawy obiektówki. Co powiesz o PHP, MySQL i MVC Gajdy? Ten post edytował kamil_lk 22.02.2013, 00:00:49 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 155 Pomógł: 17 Dołączył: 13.03.2006 Skąd: Jaworze Ostrzeżenie: (0%) ![]() ![]() |
Opis: Oczywiście wyświetlanie szczegółów przeprowadzamy tylko, jeśli podaliśmy ID. Przygotowujemy szkielet zapytania SELECT. Wykonujemy zapytanie metodą execute(). Zauważmy, że obiektem $stmt dysponujemy już od momentu wywołania metody prepare(), dlatego execute() nam już nic tu nie zwraca. Dalej postępujemy już tradycyjnie, po prostu pobierając kolejne rekordy (w tym wypadku tylko jeden) i zamykając kursor. mam nadzeije ze oe to Cu chodzi ? to przyklad wyciety z tego 1 linku jasli chodzi o ksiazke ktora podales to nei czytalem moze buć Ok jak wszystkie jego ksiażki ale moge sie mylić. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
uzupełniając to co napisał @Sephirus i MVC/MVP dodam, iż chyba lepiej byś zrobił korzystając z gotowego frameworka (obojętne i nie wymieniam z nazwy coby o nich dyskusja się nie polała tu ;]), na początek możesz robić wg. schematów i instrukcji, nie musisz wiedzieć co pod maską siedzi... no chyba, że chcesz wiedzieć wszystko co i jak to możesz trochu podłubać (jak np. mnie dawniej interesowały sockety w PHP ;])...
raz na uczelni do jednego z projektów miałem zakaz stosowania FW, a że akurat jedna miniaplikacja fajnie spasowała pod temat a była w ZF to i tak w sumie nie był problem ^^... byś miał jakiś przykład z buforowaniem z ob_... wrzucę tutaj 2 króciutkie klasy i opiszę co i jak... pierwsza jest ogólna i wykonuje całą "magię" z ob_... oraz przy jej pomocy ustawia się zmienne do widoku oraz z jej instancji pobiera się zmienne w widoku (jakby nie zdefiniowało się zmiennej wyświetla null'a co jest dla mnie też ułatwieniem) druga ją rozszerza w aplikacji i ustawia domyślne ścieżki do plików widoku które są plikami .phtml zawierającymi kod php
w klasie widoku czy to w kontrolerze czy wcześniej i podajesz instancje do kontrolera ustawiasz pliki widoków... w tej funkcji założone jest, że jest zdefiniowana zmienna APPLICATION_PATH, powyższe klasy masz jako przykład i możesz z nimi zrobić co chcesz... w BOOTSTRAPIE mógłbyś też całość objąć przez ob_ w celu przechwytywania wywołań echo itd. w kontrolerach czy innych miejscach, potem można zdefiniować, czy takie rzeczy chcesz wyświetlać przed widokiem, za czy jeśli renderujesz widok na końcu to np. błędy i inne rzeczy możesz wyświetlić w ten sposób w odpowiedniej sekcji widoku... odpowiednio planując kontrolery możesz też zrobić widok wielopoziomowy... kurcze alem się rozpisał chyba nie potrzebnie - I TAK POLECAM SKORZYSTANIE Z JAKIEGOKOLWIEK FW ]:-> -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.07.2025 - 01:13 |