Symfony 3.4 - Autowire не работает для значений привязки? - PullRequest
0 голосов
/ 14 января 2019

Я работаю над переносом существующего проекта Symfony 2.8 на Symfony 3.4 и хотел бы автоматически подключить / автоматически ввести значение параметра %kernel.environment% в действие контроллера.

Однако привязка параметра к имени аргумента не работает:

// app/config/services.yml
services:
    _defaults:
        autowire: true
        autoconfigure: true
        public: false        

        bind:
            $kernelEnvironment: '%kernel.environment%'

        MyBundle\:
            resource: '../../src/MyBundle/*'
            exclude: '../../src/MyBundle/{Entity,Repository,Tests}'

        MyBundle\Controller\:
            resource: '../../src/MyBundle/Controller'
            tags: ['controller.service_arguments']


// src/MyBundle/SomeController.php
public function showPostAction($kernelEnvironment, $post_id) {
    ...
}

Uncaught PHP Exception RuntimeException: «Controller» MyBundle \ Controller \ SomeController :: showPostAction () "требует, чтобы вы указали значение для аргумента" $ kernelEnvironment ". Либо аргумент имеет значение NULL, но нулевое значение не задано, нет задано значение по умолчанию или потому что после этого есть необязательный аргумент. "

Почему это не работает?

Я знаю, что мог бы указать MyBundle\Controller\SomeController непосредственно в services.yml и установить значение $kernelEnvironment в списке аргументов. Однако это решение будет означать, что мне придется указать аргумент для каждого контроллера, который использует этот параметр. Это не то, для чего хорош autorwire. Связывание аргумента должно работать, не так ли?

...