Ich habe mein eigenes Mini-Framework mit der gleichen Routing-Syntax gemacht. Hier ist, was ich tue:
Verwenden mod_rewrite die Parameter zu speichern (wie /some/path/{info}
) in einer $_GET
Variable Ich nenne params
:
RewriteRule ^(.+)(\?.+)?$ index.php?params=$1 [L,QSA]
die Parameter analysieren und speichern sie global mit dieser Funktion :
public static function parseAndGetParams() {
}
Weg zur richtigen Seite dynamisch:
// get the base page string, must be done after params are parsed
public static function getCurPage() {
global $params;
// default is home
if(empty($params))
return self::PAGE_HOME;
// see if it is an ajax request
else if($params[0] == self::PAGE_AJAX)
return self::PAGE_AJAX;
// see if it is a multi param page, and if not, return error
else {
// store this, as we are going to use it in the loop condition
$numParams = count($params);
// initialize to full params array
$testParams = $params;
// $i = number of params to include in the current page name being checked, {1, .., n}
for($i = $numParams; $i > 0; $i--) {
// get test page name
$page = strtolower(implode('/', $testParams));
// if the page exists, return it
if(self::pageExists($page))
return $page;
// pop the last param off
array_pop($testParams);
}
// page DNE go to error page
return self::PAGE_ERROR;
}
}
Der Wert hier ist, dass es für die Seite spezifischsten Seite der dest bestimmten sieht . Außerdem gibt es außerhalb des Frameworks vollständige Kontrolle also, wenn es irgendwo einen Fehler gibt, wissen Sie, dass Sie es beheben können - Sie müssen nicht einige seltsame Problemumgehung in Ihrem Framework nachschlagen.
Nun, da $params
global ist, ruft jede Seite, die einen Parameter verwendet, einfach $params[X]
auf, um damit zu arbeiten. Freundliche URLs ohne Rahmen.
Die Art und Weise, wie ich Seiten hinzufüge, stelle ich dann in ein Array, das im pageExists($page)
Aufruf betrachtet wird.
Für AJAX nennt, habe ich in einem speziellen IF:
// if ajax, include it and finish
if($page == PageHelper::PAGE_AJAX) {
PageHelper::includeAjaxPage();
$db->disconnect();
exit;
}
Und voilà - Ihr eigenes Mikro-Routing-Rahmen.
Sprechen Sie über [URL Neuschreiben] (http://en.wikipedia.org/wiki/URL_rewriting)? –
Ja, ich wusste nicht, das ist der Name dafür –
Ich habe wieder auf den ursprünglichen Wortlaut zurückgegriffen. Denken Sie an Benutzer, die mit dem Konzept nicht vertraut sind und die gleiche Formulierung wie er suchen. Behalten Sie den aktuellen Wortlaut bei und erklären Sie, was das Umschreiben von URLs ist. –