PHP 8 содержит новые интересные функции, такие как типы объединения, выражения соответствия и продвижение свойств конструктора. Однако наиболее востребованной новой функцией являются встроенные атрибуты (также называемые аннотациями).
Symfony 5.2 будет включать поддержку атрибутов PHP 8 для определения маршрутов и необходимых зависимостей. Если вы уже используете аннотации, переход будет плавным:
// BEFORE: annotations defined with Doctrine Annotations library
use Symfony\Component\Routing\Annotation\Route;
class SomeController
{
/**
* @Route("/path", name="action")
*/
public function someAction()
{
// ...
}
}
// AFTER: annotations defined with PHP 8 attributes
use Symfony\Component\Routing\Annotation\Route;
class SomeController
{
#[Route('/path', name: 'action')]
public function someAction()
{
// ...
}
}
Тот же класс Route
обеспечивает поддержку аннотаций Doctrine и атрибутов PHP, поэтому вам не нужно изменять импорт класса. Единственное необходимое изменение — обновить синтаксис аннотации, который теперь выглядит так: #[…]
Вот и все! Ваше приложение теперь использует собственные атрибуты PHP, и вы можете удалить зависимости, такие как doctrine/annotations
, если вы не используете их где-либо еще.
Мы также добавили атрибут #[Required]
, чтобы заменить аннотацию @Required
и сообщить Symfony, что свойство/метод содержит требуемую зависимость:
use Symfony\Contracts\Service\Attribute\Required;
class SomeService
{
#[Required]
public Bar $bar;
#[Required]
public function setFoo(Foo $foo): void
{
// ...
}
}
PHP вступает в новую золотую эру с выпуском PHP 8, и Symfony будет полностью совместим с первого дня. Эти атрибуты — только начало, и в ближайшие недели мы добавим еще много (например, для проверки).