public function __construct() { if ($_SESSION['logged_in'] = TRUE){ //Opret database connection } else { return false; exit; //Dette virker ikke, men ideen var at scriptet skulle stoppe, sådan at login functionen ikke blev kaldt. }
}
}
og:
<?php class LoginManager extends BaseService {
public function __construct() { parent::__construct(); }
public function login($user) { if ($user->username != '' && $user->password != '') { return true; } return false; } }
Det jeg gerne vil opnå er at ved et kald til functionen login(), så skal den checke om sessions er sat, og man er logged in, hvis ikke man er det, så skal kaldet til login() stoppes og false skal returneres... Men login bliver kaldt ligemeget hvad jeg gør.
Pointers, hints, tips, tricks, alt hjælp modtages glædeligt :)
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Jeg har vil bare opnå at scriptet ikke opretter en database connection og returnerer false, resultatet bliver byte coded i amf format så nej ingen html.
Jeg tænkte at det ville være smart at gøre i constructoren da jeg så ikke skulle gøre det i hver enkelt funktion, men det er vel muligt at blot at modificere koden således:
<?php class BaseService { private $authenticated = false; public function __construct() { if ($_SESSION['logged_in'] == TRUE){ //Opret database connection //$authenticated = true } }
}
og:
<?php class LoginManager extends BaseService {
public function __construct() { parent::__construct(); }
public function login($user) { if ($user->username != '' && $user->password != '' && this->$authenticated == true) { return true; } return false; } }
Men det ødelægger bare lidt formålet med at jeg ikke vil have duplicate kode i alle de klasser der extender baseService. BaseService skal kende til sessions, da jeg ikke vil oprette en database connection før jeg ved om man er logget ind.
Det giver ikke mening at blande database og kendskab til sessions sammen.
Men du kan fx kigge på http://en.wikipedia.org/wiki/Factory_method_pattern og lave et factory, der enten afleverer dig et objekt med databaseforbindelse (hvis man er logget ind), eller et "dummy"-objekt, hvis man ikke er logget ind.
Det er også blot et database objekt der bliver oprettet hvis sessions angiver logged_in == true.
Men det er ikke mit problem, mit problem er at da jeg skal extende baseservice mange gange til forskellige formål, men fælles for alle de klasser der extender er at der først skal valideres for om man er logget ind. Så giver det da god mening at proppe denne funktionalitet inde i den eneste klasse som de alle extender fra, nemlig BaseService. - Men det er det jeg ikke kan greje hvordan man gør bedst. Mit eksempel i #2 kunne være en løsning, men det virker rimelig bloated at fylde valideringskode i hver eneste function() i de klasser der extender BaseService.
I stedet for return, skal du throw'e en exception... Men ja, ellers kig på mønstre ;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.