
po zaimplementowania klasy do zmiennych post możemy się dostać w taki sposób: (przy okazji zmienne są parsowane więc możemy je traktować jako bezpieczne
natomiast pliki odebrane od użytkownika odbieramy za pomocą: (dodatkowo dodałem pole extension więc wiemy z jakim rozszerzeniem jest każdy przesłany plik
nazwa 'file' to nazwa inputa którym przesyłamy plik jeśli input nazwiemy moj_plik obiekt o takiej nazwie zostanie stworzony, na stronie możemy mieć wiele inputów oraz możemy przesyłać wiele plików w jednym inpucie, odwołujemy się do nich w taki sposób:
a tutaj wspomniana klasa:
<?php // klasa pojedyńczego pliku private $name; private $type; private $tmp_name; private $error; private $size; private $extension; public function __construct($file){ $this->name = $file['name']; $this->type = $file['type']; $this->tmp_name = $file['tmp_name']; $this->error = $file['error']; $this->size = $file['size']; //przypisanie rozszerzenia pliku do pola $extension } //pobranie szukanej właściwości public function __get($name){ } } class Post{ public function __construct(){ foreach($_POST as $post => $value){ $this->post[$post] = $this->safe_variable($value); } } //pobranie szukanej właściwości public function __get($name){ } //funkcja zabezpieczająca dane pobrane od użytkownika private function safe_variable($variable) { return $variable; } } //klasa pobierająca dane od użytkownika file / get / post class Input{ function __construct(){ //sprawdzamy czy uzytkownik przesłał plik //jeśli przesłał definiujemy tablice z nazwy każdego inputa file foreach($_FILES as $name => $wartosc){ } //analizujemy każde pole input type file foreach($input_files as $name_input => $value){ //sprawdzamy czy przesyłamy tylko jeden czy więcej plików w danym polu //aktywujemy obsługę wielu plików //przepisujemy dane pochodzące od $_FILES na normalną tablicę foreach ($_FILES[$name_input] as $key => $value) { foreach($value as $index => $val){ $temp[$index][$key] = $val; } } //tworzymy nowy obiekt dla każdego pliku foreach ($temp as $file){ } //przypisujemy wszystkie pliki danego inputa do niego $this->input_files[$name_input] = $temp_files; } //jeśli w inpucie przesyłamy tylko jeden plik przypisujemy tylko jeden plik else{ } } } //przypisujemy do zmiennej post i get informację pobrane od użytkownika foreach($_GET as $post => $value){ $this->post[$post] = $this->safe_variable($value); } $this->post = new Post(); } //zwracamy wybraną wartość public function __get($name) { switch($name){ //jesli szukamy danych w obiekcie typu post case 'post': return $this->post; // w przypadku szukania danych w pliku file default: return $this->input_files[$name]; } } public function post($name) { return $this->post->$name; } }
- myślałem tutaj o zastosowaniu interfejsów względem przyszłych klas post i get - jednak te klasy wystąpią tylko raz i innych tworzonych klas nie będzie więc to chyba bez sensu
- bardzo nie podoba mi się konstrukcja klasy post zależało mi na zachowaniu obecnego interfejsu jednak trzymanie defacto pól tej klasy w tablicy raczej jest rozwiązaniem mało obiektowy, myślę że powinienem tworzyć dynamicznie te pola w metodzie ? pytanie tylko co w sytuacji gdy chciałbym aby pola korzystały z atrybutów (private, protected).
Będę wdzięczny za krytykę sugestię itp. celem nadrzędnym jest nauka, drugorzędnym stworzenie funkcjonalnego narzędzia.