Symfony3在自定义容器中使用实体管理器

时间:2018-02-11 11:35:48

标签: symfony doctrine entitymanager symfony-3.3 symfony3.x

我想为我的项目创建HelperController。我生成一个带有doctrine的控制器:generate:controller,我需要在其中使用实体管理器。

我放弃了services.yml,但是它给出了这样的错误:

const data = [[{"option":"foo0","value":"bar0"}],[{"option":"foo1","value":"bar1"}],[{"option":"foo2","value":"bar2"}],[{"option":"foo3","value":"bar3"}]]

const result = [].concat(...data)

console.log(result)

我的控制器代码:

Argument 1 passed to CampingBundle\Controller\HelperController::__construct() must be an instance of Doctrine\ORM\EntityManager, none given ...

我的服务.yml:

namespace CampingBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Doctrine\ORM\EntityManager;

class HelperController extends Controller
{
    protected $manager;

    public function __construct(EntityManager $manager)
    {
        $this->manager = $manager;
    }

为什么它不起作用? Shoudl我清除缓存或其他什么或者定义有什么问题吗?

谢谢

2 个答案:

答案 0 :(得分:0)

尝试使用EntityManagerInterface并删除extends Controller。 如果需要CAS(控制器作为服务),请检查此link。 将protected $manager;更改为private $manager;

namespace CampingBundle\Controller;

use Doctrine\ORM\EntityManagerInterface;

class HelperController
{
    /**
     * @var EntityManagerInterface $entityManager
     */
    private $entityManager;

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

答案 1 :(得分:0)

我将把我的两分钱留在这里,因为我遇到了同样的问题,并通过向服务中添加tags来解决它。

something.validate.some_service:
  class: Path\To\Some\Validator
  arguments:
    - '@doctrine.orm.entity_manager'
  tags:
    - { name: validator.constraint_validator, alias: some_validator_alias }

How to Work with Service Tags by Symfony