![]() |
![]() |
![]()
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ś (IMG:style_emoticons/default/tongue.gif) ). Może polecacie jakieś przystępne tutoriale (zadania), które odnoszą się do rzeczy praktycznych, zamiast do kwadratów, czy trójkątów? 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 |
|
|
![]()
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 |
|
|
![]()
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ć (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
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 ]:-> |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 14:17 |