Опитвам се да създам много просто URL маршрутизиране и моят мисловен процес беше следният:
- Първо проверете всички статични URL адреси
- След това проверете URL адресите на базата данни
- След това върнете 404, ако нито едно от тях не съществува
Разбира се, статичните URL адреси са лесни за правене, но се опитвам да намеря най-добрия начин за създаване на динамични. Бих предпочел да не се налага да задавам статичен префикс, въпреки че знам, че ще направи това много по-лесно за кодиране.
Ето какво имам в момента:
$requestURL = $_SERVER['REQUEST_URI'];
if ($requestURL == '/') {
// do stuff for the homepage
}
elseif ($requestURL == '/register') {
// do stuff for registration
}
// should match just "/some-unique-url-here"
elseif (preg_match("/([\/A-Za-z0-9\-]+)/",$requestURL)) {
// query database for that url variable
}
// should match "/some-unique-url/and-another-unique-url"
elseif (preg_match("(^\/[A-Za-z0-9\-]+\/[A-Za-z0-9\-]+)/",$requestURL)) {
// query database for first and second variable
}
else {
// 404 stuff
}
Проблемът ми е, че ако имам URI "/register", той ще съответства на втория оператор elseif, както и на оператора regex. Но искам да избегна необходимостта конкретно да изключвам всеки статичен URL адрес от оператора за регулярен израз, като например този:
// should match just "/some-unique-url-here"
elseif ((preg_match("/([\/A-Za-z0-9\-]+)/",$requestURL)) &&
($requestURL !== '/register') &&
($requestURL !== '/')) {
// query database for that url variable
}
Кой е най-лесният начин за решаване на този проблем? Вероятно ще имам около 15-20 статични URL адреса, така че конкретното изключване на всички тях би било много тромаво.
-
в края на символен клас (или в началото). Освен това, за да предотвратите някои обърквания, можете да използвате други разделители, различни от наклонената черта/
, по този начин няма да е необходимо да ги избягвате в израза си~[/A-Za-z0-9-]+~
- person HamZa   schedule 24.11.2013