Новое в Symfony 5.1: URI Resolver

Компонент DomCrawler облегчает навигацию по DOM для документов HTML и XML. Большинство разработчиков используют его в функциональных тестах своих приложений Symfony, но вы можете использовать его для создания реального сканера.

При создании сканера обычно необходимо превратить ссылки содержимого HTML, которые обычно являются относительными, в абсолютные URL-адреса для продолжения сканирования всего сайта. Например, если URL-адрес сайта — https://example.com/foo, а URL-адрес ссылки — ../bar?foo=1, абсолютный URL-адрес — https://example.com/bar?foo=1.

Это преобразование намного сложнее, чем кажется, потому что вам приходится иметь дело с якорями, параметрами строки запроса и всевозможными подпутями. Компонент DomCrawler уже содержал логику для разрешения этих URL-адресов, но в Symfony 5.1 извлекли его в новый класс UriResolver, чтобы вы могли повторно использовать логику в своих приложениях:

use Symfony\Component\DomCrawler\UriResolver;

$absoluteUrl = UriResolver::resolve('../bar?foo=1', 'https://example.com/foo');
// $absoluteUrl = 'https://example.com/bar?foo=1'