Новое в Symfony 5.1: Улучшения HttpFoundation

Добавлен InputBag

Класс ParameterBag, определенный Symfony, похож на объектно-ориентированный массив, который хранит связанные значения и предоставляет такие методы, как get(), set(), has() и т. д. Symfony определяет специализированные классы ParameterBag для некоторых целей (например, FileBag для загруженных файлов. , ServerBag для заголовков HTTP и т. д.)

В Symfony 5.1 представили новый класс InputBag (который является наследником ParameterBag) для управления значениями, предоставляемыми пользователем (через суперглобальные переменные $_GET, $_POST, $_REQUEST и $_COOKIE).

Зашифрованные данные сеанса

Шифрование данных — один из рекомендуемых способов минимизировать ущерб, причиненный утечками безопасности. В Symfony 5.1 вы можете зашифровать содержимое сессии с помощью нового MarshallingSessionHandler, который, в свою очередь, использует маршаллер из компонента Cache.

Используйте следующую конфигурацию, чтобы определить данные, необходимые для шифрования сеансов:

Symfony\Component\Cache\Marshaller\SodiumMarshaller:
    decorates: 'session.marshaller'
    arguments:
        - ['%env(file:resolve:SODIUM_DECRYPTION_FILE)%']
        - '@.inner'

Поддержка всех директив HTTP Cache-Control

Symfony поддерживает наиболее часто используемые директивы HTTP Cache-control (etag, last_modified, max_age, public и т. д.). Однако не хватало некоторых из них, поэтому решили добавить поддержку всех директив управления кешем в Symfony 5.1:

  • etag
  • immutable
  • last_modified
  • max_age
  • must_revalidate
  • no_cache
  • no_store
  • no_transform
  • private
  • proxy_revalidate
  • public
  • s_maxage

Конструктор Cookie

Файлы cookie определяют множество параметров конфигурации. Вот почему именованный конструктор Cookie::create() определяет девять аргументов! В Symfony 5.1 представили несколько методов для превращения класса Cookie в объект создателя, если вы предпочитаете использовать его таким образом:

use Symfony\Component\HttpFoundation\Cookie;

// Before
$cookie = Cookie::create(
    'foo', 'bar', new \DateTime('+1 year'), '/', '.myfoodomain.com', true, true
);

// After
$cookie = Cookie::create('foo')
    ->withValue('bar')
    ->withExpires(new \DateTime('+1 year'))
    ->withDomain('.myfoodomain.com')
    ->withSecure(true)
    ->withHttpOnly(true);

Каждый метод withXXX() возвращает новый экземпляр объекта Cookie, поэтому вы также можете использовать их для изменения некоторого параметра существующего объекта cookie для создания нового.