Lige nu bruger jeg nedenstående script til at finde ud af hvilken handling, der skal ske på min hjemmeside, men jeg synes, at det bliver ret uoverskueligt hurtigt, og så har jeg hørt noget med, at man kan gøre det samme med et controller-system, så man laver nogle filer, der indeholder en controller hver, og så finder man de respektive controllere i index.php. Er det noget nogle kan hjælpe mig med? og ikke blot et stort MVC-system.
switch($_GET['module']) { case "bruger": switch($_GET['action']) { case "log_ind": // log ind break; case "log_ud": // log ud break; } break; default: switch($_GET['action']) { case "opret": // opret artikel break; default: // vis artikel break; } }
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Nu har jeg gjort som nedenfor, og så kalder jeg den på min index.php med "$router = new Router($controller, $action);". Er der nogle, der har nogle forslag til hvad der mangler eller er forkert? Jeg har aldrig forsøgt at bygge et controller-system, så jeg er helt på bar bund - så alle forslag er velkomne :)
<?php class Router { public function __construct($controller, $action) { $filename = CONTROLLERS_PATH . DIRECTORY_SEPARATOR . $controller . ".php"; if(file_exists($filename)) { include($filename);
if(class_exists($class_name)) { if(is_subclass_of($class_name, "Controller")) { $controller = new $class_name;
if(method_exists($controller, $action)) { call_user_method($action, $controller); } else { throw new Exception("Method '{$action}' could not be found!"); } } else { throw new Exception("Class '{$class_name}' is not a child of Controller!"); } } else { throw new Exception("Class '{$class_name}' could not be found!"); } } else { throw new Exception("Controller '{$controller}' could not be found!"); } } }
Det ser ud til, at nogle kalder den klasse for "Dispatcher". Er det et mere passende navn?
Hvis jeg i min controller har en funktion, der hedder index(), men man kun må se index() når man er logget ind, skal jeg så bruge header("location: ..") eller bare $this->login()? Altså videresende eller blot vise en anden funktion?
Jeg vil nok bruge header(), da du så har lidt mere fast rutine i hvordan de enkelte moduler bliver kaldt.
Om du kalder din klasse for router eller Dispather kommer jo lidt an på hvilket funktioner du ligger i klassen. Jeg personlig vælger at kalde den router, men den bruger jeg så også kun til at finde ud af hvilket modul/controller som skal kaldes. Jeg har så en anden klasse som søger for at kalde de rigtige moduler/controller.
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.