@websiteserf

Как правильно распарсить строку?

Изучая MVC решил написать роутер. Но не догоняю как распарсить строку правила.
Допустим мой REQUEST_URI следующий:

/account/edit


А правило роутинга следующее:
$rules = array(
		'/emergency/:app/:action' => array(
			'application' => '\Emergency\:app',
			'action' => ':action'
		),
		'/:app/:action' => array(
			'application' => '\App\:app\Bridge',
			"action" => ':action'
		)
	);


Плейсхолдеры :app и :action фиксированы, то есть :app/:action равно паттерну [a-zA-Z+]

Помогите написать функцию, которая бы распарсила строку /accounts/edit след. образом:

Исходная строка: /accounts/edit
Правило: /:app/:action
Правило подстановки: :app = accounts, :action = edit
  • Вопрос задан
  • 307 просмотров
Решения вопроса 1
@MadridianFox
Web-программист, многостаночник
Разбиваем правило по слешу, проходимся по полученному массиву и строим регулярку.
Если элемент массива начинается с двоеточия - добавляем в регулярку ([a-zA-Z]+), иначе добавляем сам элемент. Ктати, надо запоминать что :app - в нулевой позиции, а :action - в первой.
В итоге получаем /\/emergency\/([a-zA-Z]+)\/([a-zA-Z]+)/. Если строка проходит поиск по этой регулярке - то мы нашли что искали. Остаётся только взять найденные регуляркой значения и передать их в контроллер, не забыв присвоить им имена - не зря же мы запоминали в какой позиции стоят плейсхолдеры.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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