компилируется...
Перейти к основному содержанию
Рекомендовать во Вконтакте Рекомендовать в Фейсбуке Рекомендовать в Твиттере

Новое в Symfony 4.4: Улучшение введения зависимостей (часть 1)

Сброс контейнера в один файл

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

Эта настройка включена по умолчанию для всех новых приложений Symfony, но вы также можете включить её для существующих приложений в файле src/Kernel.php:

class Kernel extends BaseKernel
{
    // ...

    protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader): void
    {
        // ...

        $container->setParameter('container.dumper.inline_factories', true);

        // ...
    }
}

Игнорирование ошибок при импорте файлов

При импорте конфигурационных файлов вы можете использовать параметр ignore_errrors: true, чтобы игнорировать любые отсутствующие файлы. Однако, эта опция также игнорирует файлы, которые существуют, но содержат синтаксические ошибки. В Symfony 4.4 мы добавили новое значение для этой опции, поэтому игнорируйте только отсутствующие файлы, а не файлы с синтаксическими ошибками:

imports:
    # this will show an error if 'parameters.yaml' exists but contains syntax errors
    - { resource: 'parameters.yaml', ignore_errors: 'not_found' }

Разрешение привязки отмеченных сервисов

Привязка аргументов по имени или типу позволяет вводить сервисы и параметры, основанные на имени и/или типе аргументов конструктора сервиса. В Symfony 4.4 вы также можете добавлять итерабельные сервисы и сервисы с метками.

В следующем примере конфигируция _instanceof добавляет тег к любым службам, классы которых реализуют данный интерфейс, а конфигурация _defaults.bind вводит все эти службы в любой итерационный аргумент конструктора $rules:

# config/services.yaml
services:
    _instanceof:
        App\Foo\Rule\RuleInterface:
            tags: ['app.foo.rule']

    _defaults:
        bind:
            iterable $rules: !tagged_iterator app.foo.rule

    # ...

Комментарии

Пока что нет комментариев, вы можете быть первым.
Войти или Регистрация , чтобы оставлять комментарии.
Наш сайт использует куки. Узнайте больше о нашем использовании куки: политика в отношении файлов cookie
Наш сайт существует только благодаря показу онлайн-рекламы нашим посетителям.
Пожалуйста, поддержите нас, отключив блокировку рекламы.