Platton
@Platton

Создание роутера php. Другой способ разборки url?

Здравствуйте уважаемые специалисты в php и mysql. Поделитесь опытом.
Делаю роутер для своей CMS (с одной точкой входа index.php), описал такой метод для приема и разбора url - запросов от пользователей:
// Прием и разбор запросов
	public function accept()
	{
		$url_el = array();
		$url = $_SERVER['REQUEST_URI'];
		
		if(preg_match("/[^a-zA-Z0-9\/\-\?\=\.\&\#]|(\?{2,}|\-{2,}|\/{2,}|\={2,})/" , $url))
			return false;
				
		$url = parse_url($url);
		$url_el['path'] = $url['path'];
		
		if(!empty($url['path']) && $url['path'] != '/')
		{
			if(preg_match("/^\/([a-z0-9\-]+)\.html$/", $url['path'], $ress))
				$url_el['static'] = end($ress);
			elseif(preg_match("/^\/([a-z0-9\-]+)\/$/", $url['path'], $ress))
				$url_el['category'] = end($ress);
			elseif(preg_match("/^\/([a-z0-9\-]+)\/([a-z0-9\-]+)\/$/", $url['path'], $ress))
			{
				$url_el['category'] = $ress[1];
				$url_el['subcategory'] = end($ress);
			}
			elseif(preg_match("/^\/([a-z0-9\-]+)\/([a-z0-9\-]+)\.html$/", $url['path'], $ress))
			{
				$url_el['category'] = $ress[1];
				$url_el['page'] = end($ress);
			}
			elseif(preg_match("/^\/([a-z0-9\-]+)\/([a-z0-9\-]+)\/([a-z0-9\-]+)\.html$/", $url['path'], $ress))
			{
				$url_el['category'] = $ress[1];
				$url_el['subcategory'] = $ress[2];
				$url_el['page'] = end($ress);
			} 
			else
				return false;
		}

		return $url_el;
	}


Вопрос-1: Я не сильно дружу с регулярными выражениями, возможно есть другой способ сократить такой метод одной строкой?

Далее данные из массива $url_el будут сопоставятся и проверятся из данными таблиц базы данных категорий и публикаций (pages) и если все Ок такой адрес существует в БД, тогда роутер подключает соответствующий модуль(класс) для дальнейшей обработки и вывода информации для запрошенного урл адреса.

Вопрос-2: Как вы считаете такой подход не сильно будет нагружать базу данных, если посещаемость сайта будет большая (для снижения такой нагрузки дальше планируется создать кеширование). Возможно стоит создать временную таблицу БД куда будут входить элементы урл-адресов из обычных таблиц категорий и страниц? Но временные таблицы поддерживают не все хостеры.
  • Вопрос задан
  • 849 просмотров
Пригласить эксперта
Ответы на вопрос 3
@mr_ko
Javascript, Node.js. React.js, Vue.js, Wordpress
А не проще ль не городить велосипедов и взять какую то готовую библиотеку? Наприме https://github.com/nikic/FastRoute
Ответ написан
Комментировать
@galliard
1) Если большего не требуется, то такой простенький роутер можно написать на .htaccess
2) Базу нагружать не будет
Ответ написан
Комментировать
Platton
@Platton Автор вопроса
Уважаемые форумчане я осознано пишу свой велосипед, на это у меня есть свои причины. Хотелось бы узнать ваши ответы на поставленные вопросы. Спасибо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы