Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]OOP - kilka pytań o sens i poprawność "mojego" kodu
sadistic_son
post
Post #1





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cześć,
Przerobiłem na własne potrzeby kod z ksiązki ale nie do końca rozumiem, czy robię to logicznie. Generalnie to kod działa, ale sądzę, że mam tam zbędne kawałki. dodatkowo pytanie - czy to w ogóle tak powinno wyglądać?

klasa PageDisplay:
  1. namespace nameOne;
  2.  
  3. class PageDisplay
  4. {
  5. private $request;
  6. private $post;
  7. private $get;
  8.  
  9. public function __construct($request)
  10. {
  11. $requestString = \explode("?", $request);
  12. $this->request = empty($requestString) ? $request : $requestString[0];
  13. }
  14. public function processRequest()
  15. {
  16.  
  17. if (!$this->request) {
  18. return;
  19. }
  20.  
  21. $this->post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
  22. $this->get = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
  23.  
  24. switch ($this->request) {
  25. case "/":
  26. $title = 'Product List';
  27. $pageContent = "ProductList";
  28. include("ProductList.php");
  29. break;
  30. case SUBDOMAIN."add-product":
  31. $title = 'Product Add';
  32. $pageContent = "ProductAdd";
  33. include("ProductAdd.php");
  34. break;
  35. case "/mass_delete":
  36. //metoda massDelete
  37. break;
  38. case "/save":
  39. //metoda save new product
  40. break;
  41. default:
  42. $title = 'Product List';
  43. $pageContent = "ProductList";
  44. include("ProductList.php");
  45. break;
  46.  
  47. }
  48. $this->displayHeader($title);
  49. require('views/' . $pageContent . '.view.php');
  50. $this->displayFooter();
  51. }
  52.  
  53.  
  54. private function displayHeader($title)
  55. {
  56. require_once("views/html/header.html");
  57. }
  58.  
  59.  
  60. private function displayFooter()
  61. {
  62. require_once("views/html/footer.html");
  63.  
  64. }
  65.  
  66. }


Teraz w index.php mam wywołanie tej klasy i metod:
  1. include("PageDisplay.php");
  2. $page = new PageDisplay($_SERVER['REQUEST_URI']);
  3. $page->processRequest();


Moje pytania.

1. Uważam, że obiekt klasy PageDisplay jest zbędny. Skoro odwołuję się tylko do jej metod to przerobiłbym processRequest() , displayHeader($title) oraz displayFooter() na metody statyczne i w index.php odwoływałbym się do PageDisplay::processRequest Ma to sens?

2. Czy w $page = new PageDisplay($_SERVER['REQUEST_URI']); powinienem jako paramert podać właśnie REQUEST_URI? Właściwie tylko to działa....

3. Jak mam się odwoływać do $_POST czy $_GET w reszcie kodu ? No bo już nie tradycyjnie if(isset($POST['add'])){ //add(); } skoro mamy taki zapis $this->post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

Trochę się w tym pogubiłem i potrzebuję naprowadzenia. Dzięki z góry.

Ten post edytował sadistic_son 5.01.2023, 10:21:38
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ale jak coś zapamiętałem inaczej, a nie dowiedziałem się jeszcze że obecnie wygląda inaczej to dopytuję, nie kłócę się

Sek w tym ze ci juz przynajmniej 3 raz o tym mowimy, wiec nie mow ze nie widziales (IMG:style_emoticons/default/tongue.gif)
I nie, nie czekaj do konca, tylko poprawiaj na biezaco

Cytat
Ten fragment zrozumiałem, że $request oraz $this->request zawierają co innego, czyli to inne zmienne. Nie to miałes na myśli? Więc co?

No wlasnie to mialem na mysli. Skoro zawieraja co innego to czemu tak samo sie nazywaja?

Cytat
$this->subdomain = SUBDOMAIN;

No nie. Wyraznie mowie ma byc przekazane w konstuktorze a nie ustawione w konstruktorze.... Konstruktor to nadal klasa i konstuktor nie wie ze instnieje stala SUBDOMAIN.
public function __construct($request, $subdomain)
{
// (...)
$this->subdomain = $subdomain;
}


Ale jak juz pisalem w czesniej, cos masz zwalone, patrz ten komment:
"yy... ze jak? Co ma folder w ktorym znajduje sie twoja strona do adresu URL? No zdecydowanie cos zle robisz"


Cytat
Co do pytania 2 to...
Konstrukcja switch w klasie PageDisplay zakłada, że dostanie zaincludowane coś w zależności od tego co user kliknie, wpisze itd. Czyli założyłem, że jak wpisze strona.pl/stronka/add-product no to go przeniesie na stronę dodawania produkctu. W tym wypadku zczytuję z $_SERVER['REQUEST_URI'] to co user wpisał w pasku adresu, lub czy kliknął w link do tego adresu. Ale kiedy naciśnie on submit w formularzu przenoszącym do stronka.pl/stronka i prześle dane $_POSTem czy $_GETem (GET nie planuję używać) to jakoś muszę wychwycić, że np został naciśnięty submit i że wypełnił input. Stąd moje pytanie jak to w OOP realizować. Czy w switchu, w konkretnym case powinienem mieć jeszcze zwykłe if(isset($_POST['submit'] && $_POST['inputText'])) ? I z ostatnim zdaniem wiąże się moje 3. pytanie. Skoro mam utworzyć oddzielną klasę do obsługi post i get (nazwijmy ją requestProcessor) to mam się potem tak odwoływać do danych przesłanych z formularza?

REQUEST_URI zawiera ten "url", wiec ok. Ten "url" istnieje zarowno jak przeyslasz get i post wiec w czym problem?

Klase powinienes nazwac Request, jak to sie nazywa w kazdym normalnym FW. Klasa ta powinna ci zwracac twoje REQUEST_URI jak rowniez POST i GET. Moze tez miec metode isPost() ktore bedzie ci zwracala ci info czy to idzie get czy post itd
Go to the top of the page
+Quote Post
sadistic_son
post
Post #3





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 5.01.2023, 11:22:17 ) *
No wlasnie to mialem na mysli. Skoro zawieraja co innego to czemu tak samo sie nazywaja?
Ej no weź mnie pobij, ale teraz nie rozumiem. Albo ciebie, albo w ogóle rozminąłem się z jakimś sporym fragmentem traktującym o OOP.
  1. class PageDisplay
  2. {
  3. private $request; //ten $request (1)
  4.  
  5. public function __construct($request, $subdomain) /*ten $request (2)*/
  6. {
  7. $requestArray = explode("?", $request);
  8. $this->request = $requestArray[0]; //ten $this->request (3)
  9. $this->subdomain = $subdomain;
  10. }
  11. }
Zmienne (1), (2) i (3) nie zawierają tego samego? (1) i (2) tak, tak? Jak rozumiem mówisz, że (1,2) i (3) nie zawierają tego samego? Tak? Dobrze teraz rozumiem? Jesli tak to to wywraca moje pojmowanie... (IMG:style_emoticons/default/sad.gif)




Cytat(nospor @ 5.01.2023, 11:22:17 ) *
No nie. Wyraznie mowie ma byc przekazane w konstuktorze a nie ustawione w konstruktorze....
(...)
Ok, już czaję. Thx.


Cytat(nospor @ 5.01.2023, 11:22:17 ) *
REQUEST_URI zawiera ten "url", wiec ok. Ten "url" istnieje zarowno jak przeyslasz get i post wiec w czym problem?
Klase powinienes nazwac Request, jak to sie nazywa w kazdym normalnym FW. Klasa ta powinna ci zwracac twoje REQUEST_URI jak rowniez POST i GET. Moze tez miec metode isPost() ktore bedzie ci zwracala ci info czy to idzie get czy post itd
Ok, tak zrobię. Do wyczyszczenia post z syfu od usera używam filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
Czy do $_SERVER['REQUEST_URI'] oraz $_SERVER['HTTP_HOST'] też mam użyć FILTER_SANITIZE_STRING ? Zakładam też że nie filter_input_array bo to są stringi. Czy całą $_SERVER potraktować tym filter_input_array ?


Cytat(nospor @ 5.01.2023, 11:22:17 ) *
"yy... ze jak? Co ma folder w ktorym znajduje sie twoja strona do adresu URL? No zdecydowanie cos zle robisz"
Mam hosting o adresie stronka.pl
W nim mam foldery strona1 i strona2. W każdym z tych folderów index.php do obsługi zupełnie innych stron. Strona1 to forum budowlane a strona2 to portal o świnkach morskich (IMG:style_emoticons/default/smile.gif)
No więc stronka.pl/strona1 to zupełnie co innego od stronka.pl/strona2 prawda?

A więc mam w config.php:
  1. // Define URL
  2. define("SUBDOMAIN", "/strona1/");
  3. define("PRODUCT_LIST_LANDING", "localhost" . SUBDOMAIN);
  4. define("PRODUCT_ADD_LANDING", "localhost" . SUBDOMAIN . 'add-product');
  5. //na razie localhost, bo jak się przeniosę na strona.pl to zmienię 'localhost' na 'strona.pl'
A w formularzu:
  1. <form method="POST" name="productAddForm" action="http://<?= PRODUCT_LIST_LANDING ?>">
  2. (...)
  3. <button type="button"
  4. onclick="location.href='http://<?= PRODUCT_LIST_LANDING ?>add-product';" />ADD</button>


Ten post edytował sadistic_son 5.01.2023, 11:57:13
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 13:44