[MVC] kontrola danych w kontrolerze, czy modelu |
[MVC] kontrola danych w kontrolerze, czy modelu |
30.04.2011, 20:16:38
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 21.04.2011 Ostrzeżenie: (0%) |
witam,
wysylam formularzem dane do kontrolera i tam mam dwie mozliwosci 1 przeslac cala tablice POST do modelu i zalaczyc widok, albo 2 w kontrolerze odczytac dane z POST, zrobic np stripslashes itp i wtedy juz gotowe wyslac do modelu i zalaczyc widok. ktora opcja jest poprawna w modelu MVC? a drugie pytanie przy okazji wiazace sie z tym. jesli bym to robil w kontrolerze i chcialbym wczytac jakas funkcje z zewnetrznego pliku to w ktorym miejscu ja includowac?
tak jest poprawnie czy moze musze to zrobic w kontruktorze? co jesli bym chcial ja uzyc w dwoch metodach? pozdrawiam |
|
|
30.04.2011, 20:24:41
Post
#2
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 4 Dołączył: 18.09.2010 Ostrzeżenie: (0%) |
Moim zdaniem jak sama nazwa mówi, od kontroli danych jest kontroler, model obrabia już gotowe dane, zamieszczone np. w bazie czy też otrzymane od użytkownika.
Chociaż z drugiej strony, to przejechanie tablicy POST funckją stripslashes to nie jest już kontrola tylko obróbka. Ten post edytował Inscure 30.04.2011, 20:25:49 -------------------- eXtreme-Fusion CMS - polski, darmowy system zarządzania treścią z rozbudowanym wsparciem technicznym.
|
|
|
30.04.2011, 20:33:15
Post
#3
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź |
Moim zdaniem jak sama nazwa mówi, od kontroli danych jest kontroler, model obrabia już gotowe dane, zamieszczone np. w bazie czy też otrzymane od użytkownika. Chociaż z drugiej strony, to przejechanie tablicy POST funckją stripslashes to nie jest już kontrola tylko obróbka. Do walidacji danych i obróbki wspomnianą przykładową f-cją stripslashes() przesłanych z formularza do kontrolera można użyć np. specjalnego helpera, stworzonego w tym celu. Potem dane "przelecone" przez helper przekazać modelowi do zapisu w bazie danych. W ten sposób kontroler pełni tylko swoją podstawową rolę. -------------------- Life's simple... You make choices and don't look back...
|
|
|
30.04.2011, 20:36:40
Post
#4
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 4 Dołączył: 18.09.2010 Ostrzeżenie: (0%) |
W tym wypadku helper posiadałby cechy modelu jak dobrze rozumiem? Tylko że modelu innego obiektu.
-------------------- eXtreme-Fusion CMS - polski, darmowy system zarządzania treścią z rozbudowanym wsparciem technicznym.
|
|
|
30.04.2011, 20:46:10
Post
#5
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź |
W tym wypadku helper posiadałby cechy modelu jak dobrze rozumiem? Tylko że modelu innego obiektu. Można tak do tego też podejść. W gruncie rzeczy formularz też może być obiektem jakiejś klasy i cała operacja walidacji sprowadza się wtedy do wywoływania odpowiednich metod na przekazanych jako parametry obiektach, przykładowo: $Form ( formularz, obiekt klasy Form ) -> przekazujemy jako argument do klasy Helper, ona sobie tam nad nim pracuje, waliduje i zwraca już obrobiony formularz do kontrolera. Ten z kolei zwalidowany obiekt $Form przesyła do modelu, który przyjmuje go jako argument i po "rozłożeniu" na czynniki pierwsze (pola w bazie danych odpowiadające wypełnionym polom formularza) zapisują do bazy i zwracają rezultat operacji. Czyli w uproszczeniu kontroler wyglądałby tak:
Tak w uproszczeniu BTW, dokładnie na takiej zasadzie działają typowe MVC, jak Symfony czy Zend.
Powód edycji: [blooregard]:
-------------------- Life's simple... You make choices and don't look back...
|
|
|
30.04.2011, 20:53:34
Post
#6
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 21.04.2011 Ostrzeżenie: (0%) |
czyli ten Helper bylby osobna klasa, tak jak np formularz?
no i wtedy jak tego Helpera includowac? w ktorym miejscu kontrolera? |
|
|
30.04.2011, 21:04:56
Post
#7
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź |
czyli ten Helper bylby osobna klasa, tak jak np formularz? Tak, dokładnie. Postaraj się o każdym elemencie aplikacji myśleć jak o obiekcie, wyobraź sobie, w jaki sposób te obiekty ze sobą wchodzą w interakcję (np. jak w przykładzie powyżej: obiekt klasy Helper sprawdza obiekt kasy Form). Cytat no i wtedy jak tego Helpera includowac? w ktorym miejscu kontrolera? Najlepszym rozwiązaniem jest autoload, możesz też inkludować odpowiednie klasy wtedy, gdy będą Ci potrzebne i wtedy możesz to robić w konkretnej metodzie (akcji) kontrolera. -------------------- Life's simple... You make choices and don't look back...
|
|
|
30.04.2011, 21:12:59
Post
#8
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 21.04.2011 Ostrzeżenie: (0%) |
dzieki za pomoc
|
|
|
30.04.2011, 21:23:01
Post
#9
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź |
-------------------- Life's simple... You make choices and don't look back...
|
|
|
1.05.2011, 01:10:22
Post
#10
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 21.04.2011 Ostrzeżenie: (0%) |
jeszcze jedno pytanie mam podobne.
jak w kontrolerze ladowac widoki? chodzi np top, body i footer. top i footer beda zawsze takie same, wiec dla kazdego widoku ich sie nie oplaca robic i jak to lepiej rozwiazac? ladowac w kontrolerze dla kazdej akcji include top.php include body.php include footer.php czy moze w samym pliku body.php zrobic include top i footer, albo jeszcze zrobienie jednego glownego widoku, w ktorym zmienia sie tylko wlasnie body, a top i footer sa na stale i ladowanie przez kontroler samego body? 3 opcje i ktora jest najlepsza dla mvc? |
|
|
1.05.2011, 11:34:23
Post
#11
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 4 Dołączył: 15.02.2009 Ostrzeżenie: (0%) |
Najlepiej będzie jeśli skorzystasz z jakiegoś systemu szablonów.
Na przykład http://twig-project.org. Tam szablony są dekorowane i dziedziczą od siebie. Albo http://www.invenzzia.org/en/projects/open-...-power-template. Pozdrawiam. |
|
|
1.05.2011, 12:48:57
Post
#12
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 21.04.2011 Ostrzeżenie: (0%) |
dzieki, ale poki co wolalbym sie sam tego nauczyc od podstaw:)
|
|
|
1.05.2011, 12:53:24
Post
#13
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź |
Robisz jeden główny layout, w nim inkludujesz sekcje head, footer i inne, które będą stałe, na każdej podstronie.
A treść podstron inkludujesz w konkretnym kontrolerze i przekazujesz do layoutu. -------------------- Life's simple... You make choices and don't look back...
|
|
|
1.05.2011, 12:57:39
Post
#14
|
|
Grupa: Zarejestrowani Postów: 61 Pomógł: 4 Dołączył: 18.09.2010 Ostrzeżenie: (0%) |
Najlepiej będzie jeśli skorzystasz z jakiegoś systemu szablonów. Jemu nie chodzi o sposób wyświetlania użytkownikowi kodu HTML, tylko o strukturę kodu budującą odpowiednie środowisko do prezentacji treści. W swoim systemie zrobiłem to w taki sposób, że z poziomu pliku strony (np. news.php) mam pełne zarządzanie: - ułożeniem paneli bocznych - czy mają być wczytane domyślne, czy domyślne + mój własny, albo tylko mój własny - gdzie ma znaleźć się treść, dla jakich podstron itd. Działa to na zasadzie, że (zakładając że nie korzystasz z routera przekierowującego): - wpisuję ustawienia zmiennych dla systemu budującego szablon (układ paneli, panele do wyświetlenia itd), jak pominę to zostaną użyte domyślne - wczytuję nagłówek head - wczytuję sekcję środkową strony (miedzy head a footer) - następnie panele boczne - treść główną do wyświetlenia (mogę zamienić kolejność z panelami) - zamykam sekcję środkową strony - zamykam stopką Jeżeli korzystasz z routera z przekierowaniem wszystkiego na index.php, to masz sprawę ułatwioną, bo w jednym pliku wywołujesz te funkcje i tylko wczytujesz treść na podstawie parametrów w określonym miejscu. [edit:] Czyli tak jak napisał mój przedmówca. Przykład sposobu pierwszego dla pliku-strony, który ma wyświetlić statyczną treść: Kod <?php
/* * Clear-PHP v1.0 * Author: Inscure * Released under GPL v3 */ require_once 'system.php'; App::head('open'); side_left(); $result = $_sql -> queryArray("SELECT * FROM ".SQL_PFX."mod_page_node"); if ($result) { foreach ($result as $val) { App::node($val); } } else { echo $_comm->run('Materiał niedostępny', 'error'); } side_right(); App::head('close'); Ten post edytował Inscure 1.05.2011, 14:21:30 -------------------- eXtreme-Fusion CMS - polski, darmowy system zarządzania treścią z rozbudowanym wsparciem technicznym.
|
|
|
1.05.2011, 13:58:17
Post
#15
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 21.04.2011 Ostrzeżenie: (0%) |
dzieki wielkie
|
|
|
1.05.2011, 17:53:26
Post
#16
|
|
Grupa: Zarejestrowani Postów: 81 Pomógł: 4 Dołączył: 15.02.2009 Ostrzeżenie: (0%) |
Twój kod wiele mi nie mówi, ale strzelam że mieszasz kontroler, widok i model.
Jakkolwiek to sobie nazwiemy warstwa logiki powinna być zupełnie oddzielona od warstwy prezentacji. Pozdrawiam. |
|
|
Wersja Lo-Fi | Aktualny czas: 28.03.2024 - 17:39 |