Я должен реплицировать все конфигурационные файлы для каждой среды

#php #symfony #yaml

#php #symfony #yaml

Вопрос:

Я пытаюсь добавить некоторые конфигурации в каталог config / *. Я использую очень простой пример, чтобы проиллюстрировать проблему, но имейте в виду, что эта проблема возникает для всех файлов конфигурации .yaml для любых сервисов. Я не могу установить наследование между конфигурационными файлами.

Итак, в службах.yamlУ меня есть этот код :

 #config/services.yaml
parameters:
    app.debug: 0
    smtp.user: ''
    app.locale: '%kernel.default_locale%'
    app.product.number_per_page: 20
    container.dumper.inline_factories: true
services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
        bind:
            $locale: '%kernel.default_locale%'
            $product_per_page: '%app.product.number_per_page%'
  

И затем я пытаюсь получить доступ $product_per_page к своему контроллеру :

 #src/Controller/myController.php
public function listProduct(int $product_per_page){
   dump($product_per_page);
   die();
}
  

Когда я выполняю этот код, он выдает мне следующую ошибку :

Не удалось разрешить аргумент $product_per_page «App Controller ProductController::listproduct()», возможно, вы забыли зарегистрировать контроллер как сервис или пропустили пометку «controller.service_arguments»?

Поэтому я должен скопировать эти конфигурационные файлы ( config/services.yaml ), а затем вставить их в config/ services_dev.yaml, services_prod.yaml, services_test.yaml

И тогда это работает, но это совсем не подходит…

Потому что я должен делать это для всех конфигурационных файлов… Поэтому я копирую и вставляю в каждую среду каждый раз, когда я обновляю КАКУЮ-ЛИБО конфигурацию.

Конечно, я пытаюсь cache:clear и composer update , но ничего не делаю.

Я ожидал, что Symfony прочитает файл, как описано здесь, но у меня это не работает.

Я попытался создать другой проект Symfony, и теперь он работает в этом. Но я хочу понять, что не так? Есть ли что-то, что я сделал, что привело к ошибке, которую нельзя исправить даже после обновления Symfony, даже после обновления composer, даже после очистки кэша.

Я не могу поверить, что ничего не остается, кроме как создать новый проект Symfony, в который вы копируете файлы из старого.

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

1. Не совсем понимаю ваш вопрос. Исходная ошибка заключается в том, что ваш контроллер не был подключен как сервис. Обычно при использовании autowire у вас есть строка resource: ‘../src/Controller /’ в ваших службах. файл yaml, который заботится о регистрации ваших контроллеров. У вас все еще есть этот раздел?

2. Возможно, я недостаточно ясен. Как я уже сказал, я создал тестовый проект Symfony, внутри которого я делаю то же самое, что и в моем текущем проекте, и он работает так, как и должен быть. Теперь я хочу знать, не упускаю ли я чего-то, есть ли способ очистить конфигурацию служб, проект Symfony или что-нибудь еще. Потому что то, что я сделал, должно было сработать, но на самом деле не работает. Я думаю, что мой вопрос достаточно ясен

3. Как указано, ваш config / services. файл yaml не будет работать и завершится сбоем точно так, как указано в опубликованном сообщении об ошибке. По крайней мере, для меня этот разговор о новом проекте и дополнительных файлах сервиса очень запутанный, поскольку я не понимаю, как это связано с ошибкой в вашем вопросе. Возможно, вы говорите о повторении раздела _defaults в каждой службе. файл yaml? Если это так, то да, каждый файл — это отдельная единица работы, и каждому файлу нужен свой собственный раздел по умолчанию. Аналогично, каждому файлу понадобятся собственные разделы ресурсов, если это применимо. По дизайну.

4. @Cerad Хорошо, я вижу, но это: symfony.com/doc/current / … скажем обратное, поскольку существует наследование между конфигурационными файлами. Извините, я знаю, что это запутанная проблема, я попытался объяснить это как можно лучше. Но если вы хотите сделать это просто, мой вопрос таков: «Наследование между конфигурационными файлами не работает, как заставить это работать без необходимости создавать новый чистый проект Symfony»

5. Другие типы конфигурационных файлов, такие как те, которые находятся в разделе config / packages, являются просто массивами и обрабатываются совсем по-другому. Если вы хотите, мы можем перейти в чат, и вы можете показать мне, какие файлы не работают.