Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Klasa edycji danych
GreenGo
post 17.11.2010, 21:50:27
Post #1





Grupa: Zarejestrowani
Postów: 265
Pomógł: 4
Dołączył: 30.08.2004

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


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

Ten post edytował GreenGo 17.11.2010, 22:03:18
Go to the top of the page
+Quote Post
Fifi209
post 18.11.2010, 07:55:24
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


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.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
konrados
post 18.11.2010, 10:31:56
Post #3





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


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..

Ten post edytował konrados 18.11.2010, 10:32:25
Go to the top of the page
+Quote Post
Crozin
post 18.11.2010, 13:22:24
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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);
Go to the top of the page
+Quote Post
GreenGo
post 18.11.2010, 13:37:02
Post #5





Grupa: Zarejestrowani
Postów: 265
Pomógł: 4
Dołączył: 30.08.2004

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


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ć ?
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 12.06.2025 - 13:15