<?php
class router {
private $_uri = [];
private $_query = [];
public function add($uri, $query) {
$this->_uri[] = $uri;
$this->_query[] = $query;
}
public function submit() {
$url = $this->explode_url();
foreach ($this->_uri as $key => $value) {
if ($value['controller'] == ':variable') {
$getting_url['controller'] = $url[0];
goto a;
} elseif ($value['controller'] == $url[0]) {
// controller matched!
// finish
} else {
a:
if ($value['function'] == ':variable') {
$getting_url['function'] = $url[1];
goto b;
} elseif ($url[1] == $value['function']) {
// finish
} else {
b:
if ($url[2] == $value['data']) {
} elseif ($value['data'] == ':variable') {
$getting_url['data'] = $url[2];
}
}
} else {
echo 'no function';
}
}
} else {
echo 'no';
}
}
}
}
private function explode_url() {
$data = [];
$str = '';
foreach ($url as $key => $value) {
if ($key >= 2) {
$str = $str . '/' . $value;
} else {
$data[] = $value;
}
}
$data[] = trim($str, '/'); return $data;
}
}
?>
PD9waHAKCmNsYXNzIHJvdXRlciB7CgogICAgcHJpdmF0ZSAkX3VyaSA9IFtdOwogICAgcHJpdmF0ZSAkX3F1ZXJ5ID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkdXJpLCAkcXVlcnkpIHsKICAgICAgICAkdGhpcy0+X3VyaVtdID0gJHVyaTsKICAgICAgICAkdGhpcy0+X3F1ZXJ5W10gPSAkcXVlcnk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN1Ym1pdCgpIHsKICAgICAgICAkdXJsID0gJHRoaXMtPmV4cGxvZGVfdXJsKCk7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPl91cmkgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkdXJsWzBdKSkgewogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZVsnY29udHJvbGxlciddID09ICc6dmFyaWFibGUnKSB7CiAgICAgICAgICAgICAgICAgICAgJGdldHRpbmdfdXJsWydjb250cm9sbGVyJ10gPSAkdXJsWzBdOwogICAgICAgICAgICAgICAgICAgIGdvdG8gYTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkdmFsdWVbJ2NvbnRyb2xsZXInXSA9PSAkdXJsWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gY29udHJvbGxlciBtYXRjaGVkIQogICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkdXJsWzFdKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X3F1ZXJ5WyRrZXldKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluaXNoCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYToKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2YWx1ZVsnZnVuY3Rpb24nXSA9PSAnOnZhcmlhYmxlJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdldHRpbmdfdXJsWydmdW5jdGlvbiddID0gJHVybFsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCR1cmxbMV0gPT0gJHZhbHVlWydmdW5jdGlvbiddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHVybFsyXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X3F1ZXJ5WyRrZXldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2gKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHVybFsyXSA9PSAkdmFsdWVbJ2RhdGEnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X3F1ZXJ5WyRrZXldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHZhbHVlWydkYXRhJ10gPT0gJzp2YXJpYWJsZScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdldHRpbmdfdXJsWydkYXRhJ10gPSAkdXJsWzJdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ25vIGZ1bmN0aW9uJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZWNobyAnbm8nOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBwcmludF9yKCRnZXR0aW5nX3VybCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBleHBsb2RlX3VybCgpIHsKICAgICAgICAkdXJsID0gZXhwbG9kZSgnLycsIHRyaW0oJF9HRVRbJ3VybCddLCAnLycpKTsKICAgICAgICAkZGF0YSA9IFtdOwogICAgICAgICRzdHIgPSAnJzsKICAgICAgICBmb3JlYWNoICgkdXJsIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICgka2V5ID49IDIpIHsKICAgICAgICAgICAgICAgICRzdHIgPSAkc3RyIC4gJy8nIC4gJHZhbHVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGRhdGFbXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGRhdGFbXSA9IHRyaW0oJHN0ciwgJy8nKTsKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9Cgp9Cgo/Pgo=