Я пытаюсь создать очень простую маршрутизацию URL-адресов, и мой мыслительный процесс был следующим:
Статические 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 из оператора regex, например:
// 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-адресов, поэтому, в частности, исключение всех из них будет очень неуклюжим.
Ваша проблема не существует. Если первый elseif ($requestURL == '/register')
соответствует, все последующие elseif
на одном уровне не будут оцениваться.
Вы уже делаете это правильно, просто убедитесь, что сначала выполняете сравнения строк ( ==
).
С другой стороны, не изобретайте велосипед.