InvalidArgumentException Symfony4

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

После того, как я хочу вызвать действие индекса UserController, мой браузер выдает ошибку:

Контроллер «App \ Controller \ UserController» имеет обязательные аргументы конструктора и не существует в контейнере. Вы забыли дать определение такой услуге?Слишком мало аргументов для функции App \ Controller \ UserController :: __ construct (), 0 передано в /projekty/taskit/vendor/symfony/http-kernel/Controller/ControllerResolver.php в строке 133 и ожидается ровно 1

Мой файл services.yaml:

parameters:
    locale: 'en'

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.
        public: false       # Allows optimizing the container by removing unused services; this also means
                            # fetching services directly from the container via $container->get() won't work.
                            # The best practice is to be explicit about your dependencies anyway.

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

    # add more service definitions when explicit configuration is needed
    # please note that last definitions always *replace* previous ones

    App\Entity\UserRepositoryInterface: '@App\DTO\UserAssembler'

Файл UserController.php

<?php

namespace App\Controller;

use App\Service\UserService;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

/**
 * Class UserController
 * @package App\Controller
 */
class UserController extends AbstractController
{
    /**
     * @var UserService
     */
    private $userService;

    /**
     * @param UserService $userService
     */
    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

    /**
     * @Route("/users/", name = "users_index")
     */
    public function index()
    {
        $users = $this->userService->findAll();
        return $this->render('user/index.html.twig', array('users' => $users));
    }
}

И мой код файла UserService.php

<?php

namespace App\Service;

use App\Entity\UserRepositoryInterface;
use Doctrine\ORM\EntityNotFoundException;

/**
 * Class UserService
 * @package App\Service
 */
class UserService
{
    /**
     * @var UserRepositoryInterface
     */
    private $userRepository;

    /**
     * @param UserRepositoryInterface $userRepository
     */
    public function __construct(UserRepositoryInterface $userRepository)
    {
        $this->userRepository = $userRepository;
    }

    /**
     * @return array
     * @throws EntityNotFoundException
     */
    public function findAll() : array
    {
        $users = $this->userRepository->findAll();

        if (is_null($users)) {
            throw new EntityNotFoundException('Table users is empty');
        }
        return $users;
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
838
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мне кажется, вы делаете много ненужных вещей, которые уже являются частью фреймворка. Как ваша служба, чем она занимается? Вы можете вызывать свои репозитории прямо с вашего контроллера. А в вашем контроллере вы объявляете переменные и конструируете, что тоже не нужно. Просто используйте инъекцию зависимостей в своей функции в контроллере. Этот небольшой фрагмент кода должен работать и заменить как ваш контроллер, так и вашу службу (от чего, опять же, вы можете избавиться).

<?php

namespace App\Controller;

use App\Repository\UserRepository;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

/**
 * Class UserController
 * @package App\Controller
 */
class UserController extends AbstractController
{

    /**
     * @Route("/users/", name = "users_index")
     */
    public function index(UserRepository $userRepository)
    {
        $users = $this->userRepository->findAll();
        return $this->render('user/index.html.twig', array('users' => $users));
    }
}

Другие вопросы по теме