В вашем коде есть несколько моментов, на которые нужно обратить внимание, чтобы корректно настроить сервисы в Symfony и избежать критической ошибки. Давайте разберемся с каждым из них:
1. **Не совпадение имен:** В вашем `services.yaml` файл, вы определяете `TestService`, но при этом используете `CurrencyApiService` в `AddAction`. Убедитесь, что вы корректно внедряете нужный сервис.
2. **Неизвестный сервис:** Если вы пытаетесь использовать `CurrencyApiService`, вам нужно убедиться, что он также правильно определён в `services.yaml`.
3. **Неизвестный класс:** Возможно, вы забыли соответствующий `use` для `CurrencyApiService` в `AddAction`.
4. **Проверка конфигурации:** Убедитесь, что структура каталогов и конфигурации вашего проекта правильная. Например, файл `services.yaml` должен находиться в нужном пространстве имен.
Вот исправленный вариант вашего кода:
**Файл:** `src/TestBundle/Resources/config/services.yaml`
```yaml
services:
_defaults:
autowire: true
autoconfigure: true
public: false
App\TestBundle\Service\TestService:
arguments:
$a: 'aaa'
$b: 'bbb'
```
**Файл:** `src/TestBundle/Service/TestService.php`
```php
namespace App\TestBundle\Service;
class TestService
{
public function __construct(
private string $a,
private string $b,
) {
}
public function getParams(): array
{
return [
'a' => $this->a,
'b' => $this->b,
];
}
}
```
**Файл:** `src/TestBundle/Action/AddAction.php`
```php
namespace App\TestBundle\Action;
use App\TestBundle\Service\TestService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class AddAction extends AbstractController
{
public function __construct(
private TestService $testService // Измените на TestService
) {
}
public function __invoke(Request $request): Response
{
dd($this->testService->getParams());
}
}
```
**Файл:** `src/TestBundle/DependencyInjection/TestExtension.php`
```php
namespace App\TestBundle\DependencyInjection;
use Symfony\Component\Container\Builder\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\Config\FileLocator;
class TestExtension extends Extension
{
/**
* @throws \Exception
*/
public function load(array $configs, ContainerBuilder $container): void
{
$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yaml');
}
}
```
### Обратите внимание:
- Проверьте, что пространство имен ваших классов указано правильно.
- Внедряйте корректный сервис в `AddAction` (в данном случае это `TestService`, а не `CurrencyApiService`, если он не определён).
- После внесения этих изменений вы сможете избежать критической ошибки.
Не стесняйтесь задавать дополнительные вопросы, если что-то неясно!