Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Klasa edycji danych
Forum PHP.pl > Forum > Przedszkole
GreenGo
Witam,
chciałbym się dowiedzieć jak najlepiej napisać klasę edycji danych użytkownika. Chcę to napisać jak najoptymalniej i zgodnie z OOP ale nie do końca "ogarniam".
Chciałbym edytować takie dane jak, zmiana hasła, avatara, płci, informacji o sobie itp. Nazwę użytkownika mam zapisaną w sesji i po niej prawdopodobnie będę go identyfikował.
Jak dalej pisać ? Czy takie coś jak niżej jest ok ?
  1. class User {
  2. private $username;
  3.  
  4. public function __construct(){
  5. $this->username = $_SESSION['username'];
  6. }
  7.  
  8. public function editPassword ($newpass, $confpass){
  9. }

Czy każdą opcje edycji (hasło, płeć etc.) robić jako oddzielna funkcja ? Czy może w ogóle, każda edycja to powinna być oddzielna klasa ? Powinienem też pewnie coś w konstruktorze przesyłać ale nie wiem za bardzo co ? :/
Czy tworzyć w tej klasie osobne funkcje odpowiadające za wyświetlenie formularzy ?
Chcę się nauczyć dobrze to wszystko pisać więc byłbym wdzięczny za wskazówki.
Pozdrawiam smile.gif
Fifi209
Osobiście oddzieliłbym tą klasę od drugiej wyświetlającej formularze.

Tak, dla każdej opcji musisz mieć osobną funkcję, dla zamiany hasła,maila etc. :-)
Tak się robi i nikomu to jeszcze nie zaszkodziło.
konrados
A w konstruktorze przekaż username a nie, że pobierasz go sobie z session.
Dzięki temu będziesz mógł działać też na innych użytkownikach (nie tylko zalogowanych).

  1. (...)
  2. private $username;
  3. public function __construct($username){
  4. $this->username = $username;
  5. }
  6.  
  7. //i wtedy:
  8. $user = new User($_SESSION['username']);//ale możesz też pracować na jakimś innym userze


ps. Nie wiem, czy nie lepiej byłoby przekazywać raczej id użytkownika w bazie zamiast username..
Crozin
Jedna z najważniejszych zasad OOP: jeden obiekt, jedno zadanie. Klasa User ma reprezentować użytkownika (nie mylić z użytkownikiem w sensie internauty) czy zajmować się walidacją danych z formularza (wnioskuję po parametrach $newpass i $confpass)?

  1. W konstruktorze przekazujemy tylko i wyłącznie to co jest niezbędne do zainicjalizowania obiektu. Czy nazwa/id użytkownika są niezbędne? W sytuacji, gdy tworzysz nowego użytkownika ID nawet z reguły nie znasz, a nazwę użytkownika po prostu wygodniej jest przekazać setterem (User::setUsername($username)).
  2. Ta klasa User powinna mieć dwie metody od hasła: User::getPassword() i User::setPassword($password). Sama edycja hasła to już jakiś zewnętrzny proces, który jedynie wykorzystuje klasę User - całość mogła by wyglądać jakoś tak:
    1. $user = /* pobierz aktualnie zalogowanego użytkownika */;
    2. $userServicel // Obiekt zamujący się zapisywaniem/usuwaniem użytkowników
    3. $validator; // Obiekt sprawdzający poprawność danych z formularza
    4.  
    5. $data = $validator->getData(); // Powiedzmy, że to zwraca bezpieczne dane z formularza
    6.  
    7. $user->setPassword($data['password']);
    8.  
    9. $userService->update($user);
GreenGo
Do tworzenia usera ( rejestracji i logowania ) mam 2 oddzielne klasy. Ta klasa "User" o której tutaj mówię ma za zadanie umożliwić już zalogowanemu użytkownikowi edycję własnych danych takich jak wymieniłem wyżej. Z tego co myślę, to wystarczy do tej klasy przekazać nazwę użytkownika aby po prostu widzieć, który rekord ma być edytowany.
Crozin - jakoś Twojego przykładu nie ogarniam sad.gif Można prosić bardziej łopatologicznie albo może jest gdzieś jakaś prosta pełna klasa, która mogła by mi to jakoś uzmysłowić ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.