![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 24.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam Korzystam z DOCTRINE 2 i CodeIgniter. Zastanawiam się jak prawidlowo zbudować modele do czegos takiego:
W bazie mam 4 tabele Post = zawiera podstawowe informacjie o poscie Post_settings = dodatkowe wartosci dla posta categorie = kategori do ktorej zostanie dowiazany psot category_has_post = tablica laczaca Żeby korzystać z doctrinie stworzylem modele ktore odzwierciedlaja wyglad mojej bazy. Jak ma wygladac model ktory będzie doawał i edytował wpis ? myslalem nad czyms takim:
Mam jeszcze 2 pytanie, wyslalem formularz z tym wpisem chcem teraz dokanac walidacjitablicy $_POST gdzie to powino sie robic ? w Mdelu wpis czy moze mam utworzyć biblioteke którą będzie wywolywal kontrooler gdzie będzie walidowała i obrabiała $_POSTA np striptags, trim, strtoupper , empty,in_number ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 395 Pomógł: 80 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Napisałeś że korzystasz z Doctrine 2, ale u Ciebie tego nie widać, 4 tabele to 4 powinny być 4 encje z odpowiednimi powiązaniami. Mając powiązanie nie potrzebujesz żadnych metod get()/add().
Dodając nowy rekord tworzysz tylko nowy obiekt encji "persistujesz" go i zrzucasz menadżer encji. Podobnie działa edycja: pobierasz encję zmieniasz jej właściwości i także zrzucasz. Walidacją encji nie powinna zajmować się sama encja, do tego służą walidatory. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 24.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ja wiem ze nie potrzebuje takich funkcji działając na obiektach klas Post, Post_settings, categorie, category_has_post . Moje pytanie brzmi czy te klasy zamykać w osobnej klasie WPIS która będzie reprezentowała konkretny wpis na stronie. Do widoku przeslac obiekt Wpis
czy :
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 395 Pomógł: 80 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
A może zamiast klasy Wpis/Wpisy wystarczy sama klasa Post, obiekty klasy Post poprzez relacje będą posiadały ustawienia (PostSettings) oraz kategorię do jakiej należy dany post.
I do widoku wystarczy przekazać sam obiekt post i w zależności od wymagać pobierać, lub nie, inne dane (kategorie, ustawienia itd...). |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 24.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Na poczaku założyłem ze ORM-a bede używłtylko do edycji/dodawania/kasowania bo nie chcialem korzystać OMR-a do selectow i joinow tylko PDO albo DBAL-a ale teraz zastanawiam sie czy nie lepiej korzystać z ORM-a bo tam bede mail to tak jak chce. Zakładając ze jednak nie skorzystam z tych relacji i bede chciał zaprojektować własną klasę Wpis z wszystkimi ustawieniami to tak miałaby onawygladać czy cośinaczej powinno wygladac ?
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 395 Pomógł: 80 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli już nie chcesz korzystać z relacji Doctrine 2, to i tak proponowałbym klasę Post jako tą która zawiera listę/tabele kategorię i właściwości samego posta (PostSettings), jest to bardziej naturalne.
Sama klasa Wpis jest właściwie niepotrzebna, za co ona odpowiada ?, chyba że miała by być menadżerem i odpowiadała za zarządzanie postami: coś w rodzaju findOneBy($id), find($id). Tylko że to posiada Doctrine 2 i działa to niemal automatycznie. Skoro więc "zaprzągłeś" do pracy ORM-a to wykorzystaj go w pełni. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 24.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Założenie początkowe było toakie żeby w niej było wszystko przechowywane co jest mi potrzebne do Dodania/Usunięcia,Edycji i wyświetlenie 1 Wpisu. W Przypadku dodawania miała ustawiać jeden Obiekt klasy Post, obiekty Post_settings i category_has_post za pomoca danych z formularza $_POST ale rozumiem ze to mam zrobic wszystko w klasie Post tak ?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 395 Pomógł: 80 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Podsumowując:
Klasa Post posiada właściwości PostSettings oraz Category, obiekty tej klasy same się nie zapisują. Do tego służy właśnie menadżer w twoim przypadku Klasa Wpis, choć ja bym ją nazwał inaczej (PostTable z sf 1.4 lub PostRepository sf 2, aby podkreślić że operuje on tylko na Postach). Gdy otrzymujesz dane postem tworzysz nowy obiekt klasy Post, walidujesz go i wypełniasz go przesłanymi danymi. W tym momencie wkracza menadżer i to on zapisuje obiekt do bazy, lub gdziekolwiek indziej. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 24.09.2011 Ostrzeżenie: (0%) ![]() ![]() |
Trochę się pogłębiłem. Co proponujesz ? Mam zamykać te Encjie w jakąś jeszcze klase ? czy korzystać tylko z Posta i gdzie mam ustawić obikety np post_settings i je zapisać korzystając z doctrine persist , flush Robic klase która to będzie wszystko robiłą jak poroponowałem np WPIS czy moze to wszystko ma być w klasie Post która ma relacjie do innych obiektów
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 22:25 |