Новое в Symfony 5.1: Улучшенный UriSigner

В приложениях Symfony служба, связанная с классом UriSigner, добавляет подпись к URL-адресам, чтобы предотвратить их манипулирование. Symfony использует его, например, для подписи URL-адресов, созданных при использовании фрагментов в таких функциях, как ESI.

В Symfony 5.1 улучшили класс UriSigner с помощью нового метода checkRequest(). Это позволяет передать объект Symfony\Component\HttpFoundation\Request для проверки подписи соответствующего URL-адреса, вместо того чтобы создавать его самостоятельно:

// Before
$url = $request->getSchemeAndHttpHost()
    .$request->getBaseUrl()
    .$request->getPathInfo()
    .(null !== ($qs = $request->server->get('QUERY_STRING')) ? '?'.$qs : '');

if ($this->signer->check($url)) {
    // ...
}

// After
if ($this->signer->checkRequest($request)) {
    // ...
}

Еще одно улучшение, появившееся в Symfony 5.1, заключается в том, что теперь вы можете автоматически подключать сервис uri_signer. Вместо того, чтобы вводить эту службу вручную, введите любой аргумент ваших служб или контроллеров с классом Symfony\Component\HttpKernel\UriSigner, чтобы получить службу:

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\UriSigner;

class MyController extends AbstractController
{
    public function someMethod(Request $request, UriSigner $uriSigner)
    {
        if (!$uriSigner->checkRequest($request)) {
            // ...
        }
    }
}