#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, являются просто массивами и обрабатываются совсем по-другому. Если вы хотите, мы можем перейти в чат, и вы можете показать мне, какие файлы не работают.