[PHP]MySQL setters i getters |
[PHP]MySQL setters i getters |
10.01.2023, 14:47:37
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Cześć.
Walczę z kolejnym wymogiem projektu nad którym siedzę. "Logika MySQL powinna być obsługiwana przez obiekty z właściwościami, zamiast bezpośrednich wartości kolumn. Proszę użyć setters i getters aby to osiągnąć oraz nie zapomnieć użyć ich do zapisu i wyświetlania logiki." Póki co to nie użyłem setter/getter. Pokażcie proszę na przykładzie mojego poniższego kodu jak to powinno być zastosowane. Klasa Produkt
Kawałek klasy ProductAdd z metodą wrzucającą do bazy:
-------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
10.01.2023, 15:29:26
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
Ja nie wiem na kiedy masz to zrobic, ale warto by bylo bys jednak odszedl na razie od tego projektu i poprostu przelecial glowne rzeczy z OOP, poprawcowal na przykladach tam podanych i dopiero potem majac juz jakas tam wiedze z oop bral sie za ten projekt.
Bo teraz im wiecej do niego dodajesz tym coraz bledow robisz. Z tego co ci mowimy to zapamietujesz w najlepszym wypadku moze polowe, a i to nie zawsze, wiec z kazdym koljneym tematem trzeba ci na nowo mowic to co sie juz mowilo milion razy i troche to powoduje drganie zylki na czole Ale dobra, wypunktuje pare rzeczy, i wracam do pracy 1) klasa masie nie dobierac do zadnego POST. Klasy nie interesuje czy dane pochodza z POST czy marsa. klasa ma dostac dane jako parametr. W twoim przypadku przekaz tablice w konstruktorze Produkt i sobie ustaw co masz ustawic Choc wg wymagan co tu napisales to w konstruktorze nic nie przekazujesz tylko uzywasz masz setter/getter 2) public $productName; public $sku; public $price; public $productType; Naprawde nie wiesz ze productName to string a price to float i nie mozesz tego ustawic? 3) ensureNoEmpytValues() Nie, klasa produkt ma nie robic za walidator. Masz miec validator ktory przyjmie obiekt klasy Product i on stwierdzi czy jest wypelniony czy nie 4) juz ci mowilem, klasa nie wie o zadnych STALYCH w programie. Klasa ma dostac niezbedne dane np. w konstuktorze. Mowie tu o klasie DB ktore magicznie wie ze w programie sa stale z HOSTEM, PASSWORD itp. 5) Nie, klasa insert product pod zadnym pozorem nie dziedziczy po Produkt. Metoda tej klasy dostaje obiekt Produkt i na nim pracuje a nie dziedziczy 6) $db = new DB(); No nie. Obiekt klasy DB masz stworzyc tylko raz, gdzies np w index.php i ten obiekt masz przekazywac do klas, ktore beda go wymagaly. Poczytaj o DI (dependency injection) 7) W ostatnich tematach bylo jeszcze wiecej bledow ale juz nie pamietam zas to o co pytasz to banalne settery, w kazdym lepszy arcie o tym masz, czyli nie
a
i metody
a potem w kodzie
i pobranie -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
10.01.2023, 16:52:15
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Ja nie wiem na kiedy masz to zrobic Na piątek.warto by bylo bys jednak odszedl na razie od tego projektu i poprostu przelecial glowne rzeczy z OOP, poprawcowal na przykladach tam podanych i dopiero potem majac juz jakas tam wiedze z oop bral sie za ten projekt. Jeśli odejdę od tego projektu, to obecnej pracy nie zmienię przynajmniej do maja, a jak zostanę w niej na dłużej to... Nie chcę myśleć. Bo teraz im wiecej do niego dodajesz tym coraz bledow robisz. Przerobiłem książkę i wydawało mi się to wszystko jasne. Kod z niej rozumiałem, tłumaczenia też. Ogólne zasady OOP też, a przynajmniej tak mi się wydawało. Więc stwierdziłem, że najlepszym trenerem jest praktyka i zacząłem pisać projekt. No i tutaj się okazało, że jednak wydawało mi się, że coś było jasne (póki to czytałem), a w międzyczasie również, że ta książka to szajs - że jest w niej pełno literówek, różnych błędów logicznych, że uczy złych praktyk. Więc nie chcę do niej wracać. Okazało się tez po drodze, że php zmienia się z wersji na wersję bardziej niż sądziłem, a co za tym idzie ciężej zaraz ufać różnym artykułom i samouczkom znalezionym w google, bo rzadko udaje się coś z 2022 dorwać. Stąd moje ciągłe pytania tutaj - odpowiedzi są zawsze aktualne Ale dobra, wypunktuje pare rzeczy, i wracam do pracy. Dzięki, opisałeś to jasno. Przynajmniej tak mi się wydaje, a głowę mam już napuchniętą o tej godzinie. Mój projekt już funkcjonalnie działa. Teraz czas na poprawianie błędów w OOP - przebudowywanie klas wedle tego co napisałeś powyżej. Mam nadzieję, że jutro się z tym wyrobię, bo na czwartek zostawiam sobie javascript i wieczorem wysyłam. -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
10.01.2023, 16:55:20
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
No dobra, nie pozostalo w takim razie nic innego jak zyczyc powodzenia
No to mecz nas do tego czwartku, ale nie zapominaj polowy w miedzyczasie -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 12:18:56
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
No dobra, nie pozostalo w takim razie nic innego jak zyczyc powodzenia Dzięki.No to mecz nas do tego czwartku, ale nie zapominaj polowy w miedzyczasie Uff, no to zabieram się. JS jednak już dziś męczyłem. 6) $db = new DB(); Przeczytałem TO. Obawiam się, że nie zdążę tego opanować tak żeby jeszcze przerobić właściwie cały mój kod do (końca) jutra. Bez DI $db = new DB(); w index.php i po wywaleniu z reszty kodu (wszystkich metod z różnych klas) oczywiście nie działa. No nie. Obiekt klasy DB masz stworzyc tylko raz, gdzies np w index.php i ten obiekt masz przekazywac do klas, ktore beda go wymagaly. Poczytaj o DI (dependency injection) nospor - czy pozostawienie tego tak jak jest, tj. tworzenie nowego obiektu DB(string $db_name_itd) w różnych metodach, gdzie tego potrzebuję to jest taki fatalny błąd i skreśla całą aplikację? Czy jednak da się na to przymknąć oko u kogoś kto na juniora aspiruje? Czy wystarczy zrobić $db = new DB(); w index.php i potem do każdej metody wymagającej bazy tylko przekazywać $db jako parametr? Tak cię zrozumiałem powyżej. insertNewUser($db, $userName); Ten post edytował sadistic_son 12.01.2023, 12:22:35 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 12:27:05
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
Cytat Czy jednak da się na to przymknąć oko u kogoś kto na juniora aspiruje? Jesli na juniora to powinno ujsc. Nie mnie jednak nie moge powiedziec jak oni beda na to patrzec. A dlaczago to jest blad? Bo ile tazy robisz $db = new DB(); to tyle razy tworzysz nowe polaczenie do bazy danych. Raz pracowalem nad projektem gdzie ludzei tak robili 27 razy w jednym request i tworzylo sie 27 nowych polaczen do bazy danych, tylko dla jednego requst. A szefostwo ciagle narzekalo ze zasoby im zzera i aplikacja wolno dziala.... jesli nie chcesz tego robic jako DI, zrob z tego singleton. 10minut roboty Przypomnij mi twoja klase DB Zreszta tu masz szybkie wyjasnienie https://designpatternsphp.readthedocs.io/pl...ton/README.html -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 12:46:01
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
W chwili obecnej moja klasa DB wygląda tak:
Nowy obiekt w index.php:
Generalnie to w index zaciąga config.php przez require. W config natomiast nie mam żadnej klasy, tylko mam podefiniowane stałe do DB oraz include DB.php, Product.php oraz PageDisplay.php (która to dalej zaciąga więcej klas). Teraz na początku ProductList.view.php tworze obiekt $products = new ProductList($db); i tutaj zmienna $db jest nieznana. Coś mi świta sprzed lat, że to przez to że raz używam require a raz include. Jedno z nich chyba do zaciągniętego pliku nie przekazuje zmiennych z zaciągającego pliku. dobrze kombinuję? jesli nie chcesz tego robic jako DI, zrob z tego singleton. 10minut roboty Może dla ciebie Dla mnie to będzie 60-90 minut czytania po 3 razy, nastepnie analiza tego kodu przez godzinę, potem wklepywanie do mnie i analizowanie przez kolejne pół dnia co zrobiłem źle, że nie działa. Potem pisanie na forum o pomoc. Łącznie - 2dni...
Ten post edytował sadistic_son 12.01.2023, 12:46:30 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 12:50:37
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
Cytat Teraz na początku ProductList.view.php tworze obiekt $products = new ProductList($db) $products powinno byc przekazane do ProductList.view.php a nie tworzone w ProductList.view.php A jak tworzysz/owierasz ProductList.view.php ? Cytat W config natomiast nie mam żadnej klasy, tylko mam podefiniowane stałe do DB oraz include DB.php, Product.php oraz PageDisplay.php Czemu w config tworzysz/zaciagasz DB i Product i PageDisplay? No i skoro PageDisplay zarzadza caloscia, to $db masz przekazac do PageDisplay, to wtedy rzeczy w PageDisplay beda widziec $db. No to sa podstawy z Zasiegu Zmiennych https://www.php.net/manual/en/language.variables.scope.php -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 13:06:46
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Czemu w config tworzysz/zaciagasz DB i Product i PageDisplay? Tak mi się wydawało rozsądnie na bazie tego co przerobiłem ze wspomnianej nie raz książki, której przerobienia teraz żałuję. A gdzie mam wtedy zaciągać DB i PageDisplay (Product na razie powstało ale nic jeszcze nie robi )? W index.php ?No i skoro PageDisplay zarzadza caloscia, to $db masz przekazac do PageDisplay, to wtedy rzeczy w PageDisplay beda widziec $db. No to sa podstawy z Zasiegu Zmiennych Zasięg zmiennych to jeszcze ogarniam. Chyba... :| Ale zaraz to się wyjaśnie jak opiszę moją strukturę.https://www.php.net/manual/en/language.variables.scope.php Tak więc w index.php mam niewiele:
w configu definuję stałe do DB (to dobre miejsce na to , tak?) oraz zaciągam DB.php oraz PageDisplay.php. Teraz PageDisplay wg mojego założenia miała sprawdzać którą z dwóch podstron wybrano (liste produktów lub dodawanie produktu). W index.php ją wywołuję i przekazuję w parametrach $request oraz $db. Jeszcze nie zabrałem się za jej porządkowanie, więc wiem że idzie zwymiotować jak się na nią patrzy. Tak - zaciąga stałe a nie powinna, ma w sobie $_POST a powinna go dostać w parametrze. Wiem to wszystko już, i zamierzam ją oczyścić. A zacząłem od $db. Wygląda ona tak:
Teraz jak widać switch decyduje o tym (poprzez include) która strona ma się wyświetlić. Nie wiem czy chcę się tutaj dzielić ProductAdd.php i ProductList.php bo tam to już jest kompletny p1erdolnik i mi wstyd :| EDIT: to moje ProductList.php Chyba nie wygląda jeszcze, aż tak źle, żeby mnie postawić przed ścianą egzekucyjną.
Ten post edytował sadistic_son 12.01.2023, 13:13:47 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 13:14:44
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
Cytat Nie wiem czy chcę się tutaj dzielić ProductAdd.php i ProductList.php bo tam to już jest kompletny p1erdolnik i mi wstyd :| Gorzej juz nie bedzie pokazuj, a potrzebuje tego by widziec co z tym $db dalej robic No dobra, tu masz blad $productObject = new ProductAdd($db); przeciez nie $db a $this->db $productObject = new ProductAdd($this->db); zakladam ze z produktList jest podobnie -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 13:18:36
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Ok, to ProductList wkleiłem wyżej a tutaj największy burdel - ProductAdd. Zaznaczam, że jeszcze tutaj jest zupełnie przed czyszczeniem tych klas - używają $_POST wewnątrz, nie ma konstruktorów, setter/getter itd. Nie ma wszędzie typowania zmiennych czy tego co ma zwracać metoda. To wszystko do poprawienia jeszcze.
No i Product.php. Jednak coś tam robi. Nawet zapomniałem, że to napisałem.
EDIT: Gorzej juz nie bedzie pokazuj, a potrzebuje tego by widziec co z tym $db dalej robic No dobra, tu masz blad $productObject = new ProductAdd($db); przeciez nie $db a $this->db $productObject = new ProductAdd($this->db); zakladam ze z produktList jest podobnie A no tak, przecież $db to ona jest w index, a wewnątrz klasy to już jest $this->db Lecę na zakupy na obiad i za 45 minut zabieram się za porządkowanie tego bałaganu. Czy w międzyczasie byłbyś uprzejmy mi z grubsza opisać jak naprawić konstrukcję tej strony, żeby choć przypominała jakiś wzorzec projektowy? W którym miejscu najlepiej porobić setter/getter żeby wykazać że wiem o co w nich chodzi (wymóg projektu)? Jest tu jakaś klasa z której można zrobić abstrakcyjną i byloby to uzasadnione? Ten post edytował sadistic_son 12.01.2023, 13:20:29 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 13:27:24
Post
#12
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
Jak pisalem wczesniej:
nie $productObject = new ProductAdd($db); a $productObject = new ProductAdd($this->db); No i skoro $db to obiekt klasy DB to nie private $db; public function __construct($db){ $this->$db = $db; } a private DB $db; public function __construct(DB $db){ $this->$db = $db; } Cytat W którym miejscu najlepiej porobić setter/getter żeby wykazać że wiem o co w nich chodzi (wymóg projektu)? No jak zrobic setter/getter przeciez ci podalem w pierwszym poscie tego wlasnie tematu. Cytat Jest tu jakaś klasa z której można zrobić abstrakcyjną i byloby to uzasadnione? Tan caly balagan to jedna wielka abstrakcja wiec juz masz A na powaznie, nachwile obecna nie widze gdzie to by mozna bylo dac, za duzy balagan i za malo czasu by poprawiac class ProductAdd extends Product Pisalem, ze ProductAdd nie moze dziedziczyc po Produkt, tylko ma dostac Produkt gdzie trzeba. public function insertNewProduct(Product $product) -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 14:05:55
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
No jak zrobic setter/getter przeciez ci podalem w pierwszym poscie tego wlasnie tematu. Tak tak, jak zrobić i w którym miejscu danej klasy to rozumiem - pisałeś. Ale moje pytanie było bardziej typu - czy dla każdej klasy to robić? Czy są jakieś uzasadnienia kiedy getter/setter nie robić? Czy w moim powyższym kodzie jest jakaś klasa w której szczególnie aż rzuca się w oczy że powinny byś gettery i settery?Tan caly balagan to jedna wielka abstrakcja wiec juz masz Serio jest aż tak źle, że nawet kandydat na juniora powinien się wstydzić?class ProductAdd extends Product Pisalem, ze ProductAdd nie moze dziedziczyc po Produkt, tylko ma dostac Produkt gdzie trzeba. public function insertNewProduct(Product $product) Ok, clear. Nie zdążyłem tego jeszcze poprawić. I tak dziś to wygląda to wszystko już dużo lepiej niż jeszcze choćby 24h temu. A czy sama klasa Product jest zrobiona należycie? Ten post edytował sadistic_son 12.01.2023, 14:07:00 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 14:19:11
Post
#14
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
napisz te setter dla Product tylko.
Cytat Serio jest aż tak źle, że nawet kandydat na juniora powinien się wstydzić? Ja tylko mowie ze jest balagan a nie ze maszs sie wstydzic. Wybacz, nie jestem za dobry w social talks Cytat A czy sama klasa Product jest zrobiona należycie? NO teraz nie. NIe masz setterow/getterow tylko w construktorze pobierasz z POST Dodatkowo masz tam validacje napisana a mowilem ci tez juzze walidacja ma byc gdzie indziej. Klasa Product wg rozumienia DTO, a w tym kontekscie to bylo pisane, ma miec tyko pola, ktore chcesz wypelnic no i te settery/gettery i to wszystko -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 14:53:00
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
napisz te setter dla Product tylko. Ja tylko mowie ze jest balagan a nie ze maszs sie wstydzic. Wybacz, nie jestem za dobry w social talks NO teraz nie. NIe masz setterow/getterow tylko w construktorze pobierasz z POST Dodatkowo masz tam validacje napisana a mowilem ci tez juzze walidacja ma byc gdzie indziej. Klasa Product wg rozumienia DTO, a w tym kontekscie to bylo pisane, ma miec tyko pola, ktore chcesz wypelnic no i te settery/gettery i to wszystko Ok, rozumiem. Zabrałem się za to, ale najpierw zrobiłem sobie backup plików. A następnie sprawdziłem czy wszystkie funkcjonalności działają. I kurde nie dodaje mi nowego produktu okazało się. Doszedłem do tego że właśnie ta metoda ensureNoEmpytValues z Product zwraca false. Natomiast var dump z POST wygląda ok: Kod Array Coś gdzieś po drodze spieprzyłem i nie potrafię znaleźć co. Wygląda na to, że metoda z klasy ProductAdd, która w chwili obecnej nadal dziedziczy po Product, nie widzi tych miennych:( [save] => save [sku] => NoweSKU [name] => photos [price] => 120 [productType] => Book [weight] => 1 } $sku = $this->sku; $productName = $this->productName; $price = $this->price; $selectedType = $this->productType; Dlaczego? W Product jest konstruktor do sku, price itd. Następnie dziedzicząca klasa nie wie co to jest $this->sku ... -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 14:55:21
Post
#16
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
Cytat Coś gdzieś po drodze spieprzyłem i nie potrafię znaleźć co. Wygląda na to, że metoda z klasy ProductAdd, która w chwili obecnej nadal dziedziczy po Product, nie widzi tych miennych: $sku = $this->sku; $productName = $this->productName; $price = $this->price; $selectedType = $this->productType; No logicznie przeciez. Jesli zrobiles jak mowilem czyli public function insertNewProduct(Product $product) to te zmienne masz w $product->productName itd itd. No chyba ze juz gettery masz to wtedy uzyj getterow -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 15:07:40
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Nic jeszcze nie zrobiłem, bo od godziny (odkąd poprawiłem wszędzie wszystko odnosnie $db) to się głowię czemu nie dodaje nowego produktu.
Tak więc w chwili obecnej mam tak:
Tak więc na razie metoda klasy ProductAdd dziedziczącej po Product powinna znać $this->productName prawda? A generalnie wynika z tego że ensureNoEmpytValues zwraca false, czyli nawet sama klasa Product nie wie co to za zmienne. A POST przechodzi. Natomiast kiedy zrobię tak public function insertNewProduct(Product $product) to mam za mało argumentów. Kod Fatal error: Uncaught ArgumentCountError: Too few arguments to function nameOne\ProductAdd::insertNewProduct(), 0 passed in pagefiles/PageDisplay.php on line 41 and exactly 1 expected in pagefiles/ProductAdd.php:76 Stack trace: #0 pagefiles/PageDisplay.php(41): nameOne\ProductAdd->insertNewProduct() #1 /public_html/index.php(36): nameOne\PageDisplay->decideOnContent() #2 {main} thrown in pagefiles/ProductAdd.php on line 76
Ten post edytował sadistic_son 12.01.2023, 15:08:00 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 15:08:48
Post
#18
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
Kurcze, ale ty nadal dziedziczysz po Produkt.
A pewnie masz jeszcze konstruktor w ProductAdd ktory nadpisuje ci konstruktor z Produkt, temu twoje rzeczy nie sa ustawione bo konstruktor z Product sie nie odpala... Jesli nadal chcesz miec to swoje bezsensoswne dziedziecznie to w konstuktorze ProductAdd masz wywolac konstuktor z Product class ProductAdd extends Product { private $db; public function __construct($db){ $this->$db = $db; parent::__construct(); } -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
12.01.2023, 15:14:03
Post
#19
|
|
Grupa: Zarejestrowani Postów: 1 493 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) |
Jesli nadal chcesz miec to swoje bezsensoswne dziedziecznie to w konstuktorze ProductAdd masz wywolac konstuktor z Product Zamierzam się go pozbyć, ale na razie chcę mieć działającą stronę (mimo chaosu w kodzie), a po uprzednich poprawkach z dziś już ona nie działa Dodałem konstruktor rodzica, to mnie uderzyło tym... Kod Fatal error Kurde, opadam z sił. Jest uczucie rezygnacji Sprzątanie takiego bałaganu to dramat : Uncaught TypeError: Cannot assign null to property Product::$productName of type string in /home/xxx/domains/xxx/public_html/pagefiles/Product.php:12 Stack trace: #0 /home/xxx/domains/xxx/public_html/pagefiles/ProductAdd.php(12): Product->__construct() #1 /home/xxx/domains/xxx/public_html/pagefiles/views/ProductAdd.view.php(4): nameOne\ProductAdd->__construct(Object(nameOne\DB)) #2 /home/xxx/domains/xxx/public_html/pagefiles/PageDisplay.php(55): require('/home/xxx/do...') #3 /home/xxx/domains/xxx/public_html/index.php(36): nameOne\PageDisplay->decideOnContent() #4 {main} thrown in /home/xxx/domains/xxx/public_html/pagefiles/Product.php on line 12 EDIT: Tak, bo teraz jak tylko wejdę na stronę to konstruktor działa i sprawdza czy $_POST są podane. A że nie ma to próbuje dac im null. Ale czemu nie może przypisać? Ten post edytował sadistic_son 12.01.2023, 15:16:03 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
12.01.2023, 15:17:59
Post
#20
|
|
Grupa: Moderatorzy Postów: 36 519 Pomógł: 6308 Dołączył: 27.12.2004 |
Pokaz jak wyglada teraz ProductAdd i Product
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
Wersja Lo-Fi | Aktualny czas: 24.09.2024 - 18:30 |