__construct() 必须是 Doctrine\Common\Persistance\ObjectManager 的一个实例 [英] __construct() must be an instance of Doctrine\Common\Persistance\ObjectManager

查看:21
本文介绍了__construct() 必须是 Doctrine\Common\Persistance\ObjectManager 的一个实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 Objectmanger 来使用 Doctrine .. 我创建了 objectManager 的实例并创建了服务,但我有这个错误:

I use Objectmanger for use Doctrine .. I create instance of objectManager and I create service but I have this bug:

Catchable Fatal Error:传递给 Tag\TagBundle\Form\Types\TagsType::__construct() 的参数 1 必须是 Doctrine\Common\Persistance\ObjectManager 的实例,给出的 Doctrine\ORM\EntityManager 的实例,在/中调用var/www/html/TagProject/var/cache/dev/appDevDebugProjectContainer.php 在线 2412 并定义

Catchable Fatal Error: Argument 1 passed to Tag\TagBundle\Form\Types\TagsType::__construct() must be an instance of Doctrine\Common\Persistance\ObjectManager, instance of Doctrine\ORM\EntityManager given, called in /var/www/html/TagProject/var/cache/dev/appDevDebugProjectContainer.php on line 2412 and defined

代码标签类型:

<?php 

    namespace Tag\TagBundle\Form\Types;

    use Symfony\Component\Form\AbstractType;
    use Symfony\Component\Form\Extension\Core\Type\TextType;
    use Tag\TagBundle\Form\DataTransformer\TagsTransformer;
    use Symfony\Bridge\Doctrine\Form\DataTransformer\CollectionToArrayTransformer;
    use Symfony\Component\Form\FormBuilderInterface;
    use Doctrine\Common\Persistance\ObjectManager;

    class TagsType extends AbstractType {

    /**
     * @var ObjectManager
     */

    private $manager;

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

        public function buildForm(FormBuilderInterface $builder, array $options){
            $builder
                    ->addModelTransformer(new CollectionToArrayTransformer(),true)
                    ->addModelTransformer(new TagsTransformer($this->manager),true);
        }

        public function getParent(){
            return TextType::class;
        }

    }

代码标签转换器:

<?php 

            namespace Tag\TagBundle\Form\DataTransformer;

            use Symfony\Component\Form\DataTransformerInterface;
            use Tag\TagBundle\Entity\Tag;
            use Doctrine\Common\Persistance\ObjectManager;

            class TagsTransformer implements DataTransformerInterface {


            /**
             * @var ObjectManager
             */

            private $manager;

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

            public function transform($value) {
                dump($value);
                return implode(',',$value);
            }

                public function reverseTransform($string)
                {
                    $names = explode(',',$string);
                    $tags = $this->manager->getRepository('TagBundle:Tag')->findBy(['name' => $names]);
                    $newNames = array_diff($names, $tags);
                    foreach($names as $name){
                        $tag = new tag();
                        $tag->setName($name);
                        $tags[] = $tag;
                    }
                    return $tags;
                }
            }

代码 services.yml:

code services.yml:

services:
  tag.form.types.tages:
    class: Tag\TagBundle\Form\Types\TagsType
    arguments: ["@doctrine.orm.entity_manager"]
    tags:
      - { name: form.type }
#    tag.example:
#        class: Tag\TagBundle\Example
#        arguments: ["@service_id", "plain_value", "%parameter%"]

推荐答案

您正在注入 EntityManager 的实例,因此您应该使用相应的接口 Doctrine\ORM\EntityManagerInterface 用于打字提示.

You're injecting an instance of EntityManager so you should use the corresponding interface Doctrine\ORM\EntityManagerInterface for typehinting.

use Doctrine\ORM\EntityManagerInterface;

class TagsTransformer implements DataTransformerInterface 
{
    /**
     * @var EntityManagerInterface
     */
    private $manager;

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

这篇关于__construct() 必须是 Doctrine\Common\Persistance\ObjectManager 的一个实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆