首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InvalidArgumentException Symfony4

InvalidArgumentException Symfony4
EN

Stack Overflow用户
提问于 2018-11-12 17:06:04
回答 1查看 1K关注 0票数 0

当我把我的应用程序移到码头集装箱时,我遇到了问题。我是Symfony的新手,我不知道问题出在哪里。

在我想调用我的UserController索引操作之后,我的浏览器抛出一个错误:

控制器"App\Controller\UserController“具有所需的构造函数参数,并且在容器中不存在。您忘记定义这样的服务了吗?函数App\Controller\UserController::__construct()的参数太少了,在第133行的App\Controller\UserController::__construct()中传递的参数太少,而预期的值正好是1。

我的services.yaml文件:

代码语言:javascript
复制
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文件

代码语言:javascript
复制
<?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文件代码

代码语言:javascript
复制
<?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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-12 22:21:21

在我看来,您正在做许多不必要的事情,这已经是框架的一部分。就像你的服务,它是做什么的?您可以直接从控制器调用存储库。在控制器中,您声明变量和构造变量,这也是不必要的。只需在控制器中的函数中使用依赖注入即可。这一小部分代码应该可以工作,并同时替换控制器和服务(这也是您可以摆脱的)。

代码语言:javascript
复制
<?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));
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53266910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档