Вышла новая версия Symfony 7.1
Вышла очередная минорная версия Symfony 7.1
Как и все минорные обновления Symfony поддерживает обратную совместимость.
А это означает, что вы сможете легко обновиться, ничего не меняя в своем коде.
Ниже перечислены некоторые изменения для этой версии:
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