Вышла новая версия Symfony 7.1

Дата публикации: 2024-05-31
Просмотры: 410

Вышла очередная минорная версия Symfony 7.1
Как и все минорные обновления Symfony поддерживает обратную совместимость.
А это означает, что вы сможете легко обновиться, ничего не меняя в своем коде.

Вышла новая версия Symfony 7.1

Ниже перечислены некоторые изменения для этой версии:

IsCsrfTokenValid Attribute

CSRF (Cross-site Request Forgery) - используются злонамеренными пользователями, чтобы заставить ваших законных пользователей отправлять данные по незнанию. В Symfony обеспечивается полная защита от CSRF-атак благодаря компоненту SecurityCsrf.

Ниже приведен общий фрагмент кода, используемый в контроллерах, которые расширяют Symfony AbstractController для проверки правильности токена CSRF формы:

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;

class BlogPostController extends AbstractController
{
    // ...

    public function delete(): Response
    {
        if (!$this->isCsrfTokenValid('delete_example', $request->request->getString('_token'))) {
            throw new BadRequestHttpException('This token is invalid');
        }

        // ...
    }
}

В Symfony 7.1 ввели новый #[IsCsrfTokenValid] атрибут, чтобы упростить этот код:

// ...
use Symfony\Component\Security\Http\Attribute\IsCsrfTokenValid;

class BlogPostController
{
    // ...

    #[IsCsrfTokenValid('delete_example')]
    public function delete(): Response
    {
        // ...
    }
}

Другая распространенная необходимость — проверить несколько похожих токенов CSRF. Например, в списке сообщений блога каждая из них имеет немного другую форму удаления:

{% for post in blog_posts %}
    {# ... #}

    <form action="{{ path('post_delete', {post: post.id}) }}" method="POST">
        <input type="hidden" name="_token" value="{{ csrf_token('delete-post-' ~ post.id) }}">
    </form>
{% endfor %}

Эту проблему также можно решить с помощью #[IsCsrfTokenValid] атрибута, поскольку он поддерживает выражения, совместимые с компонентом ExpressionLanguage:

// ...
use Symfony\Component\ExpressionLanguage\Expression;

class BlogPostController
{
    // ...

    #[IsCsrfTokenValid(new Expression('"delete-post-" ~ args["post"].id'))]
    public function delete(Request $request, Post $post): Response
    {
        // ...
    }
}

WebProfiler Improvements

Профилировщик Symfony — это инструмент отладки, который предоставляет подробную информацию о выполнении любого HTTP-запроса или консольной команды. В Symfony 7.1 добавили в него несколько улучшений.

  • Во-первых, в меню боковой панели теперь сначала отображаются активные пункты меню, чтобы не отвлекать вас панелями, которые не содержат никакой информации, относящейся к этому запросу/команде
  • Улучшили производительность веб-интерфейса профилировщика. В рамках этого улучшения форма поиска была удалена из боковой панели, чтобы предотвратить неприятный переход на страницу при загрузке сложных панелей профилировщика. Форма поиска по-прежнему находится всего в одном клике в обновленной верхней части боковой панели
  • На многих панелях профилировщика вы увидите длинные таблицы строк значений ключа. В Symfony 7.1 эти таблицы теперь будут включать в себя данные поиска

Emoji Improvements

В Symfony 7.1 решили удалить данные эмодзи из Symfony Intl и переместить их в новый компонент Emoji. Единственная разница на практике заключается в том, что при транслитерации/создании смайлов вам необходимо сначала запустить это в своем проекте, чтобы установить новый компонент

compose require symfony/emoji

Об этих и других улучшениях вы можете почитать по ссылке ниже.
Ссылка на источник: https://symfony.com/blog/symfony-7-1-0-released

Предыдущая статья:

Вышла новая версия Rector 1.0
Поделиться статьей:

Комментарии:

Авторизуйтесь, для того, чтобы оставить комментарий. Войти на сайт
Подписка на новости
Узнавайте о новых статьях первыми.
Профиль