Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在自定义存储库中注入类-Symfony 2.7_Php_Symfony_Doctrine Orm_Silex - Fatal编程技术网

Php 如何在自定义存储库中注入类-Symfony 2.7

Php 如何在自定义存储库中注入类-Symfony 2.7,php,symfony,doctrine-orm,silex,Php,Symfony,Doctrine Orm,Silex,我有一个自定义的存储库类,我必须在其中插入一个类来帮助我上传文件,并在需要时删除文件。我扩展了EntityRepository构造函数,但我不知道如何在自定义存储库类中添加第三个参数 class NewRepository extends EntityRepository { protected $fileUploader; public function __construct(EntityManager $em, Mapping\Cla

我有一个自定义的存储库类,我必须在其中插入一个类来帮助我上传文件,并在需要时删除文件。我扩展了EntityRepository构造函数,但我不知道如何在自定义存储库类中添加第三个参数

    class NewRepository extends EntityRepository
    {

        protected $fileUploader;



        public function __construct(EntityManager $em, Mapping\ClassMetadata $class,FileUploader $fileUploader)
        {
            parent::__construct($em, $class);
        }

        public function create($data, Item $item = null)
        {
            $em = $this->getEntityManager();
            if(!$item) $item = new Item();

            if(isset($data['file'])) {
                $image = $this->fileUploader->setFile($data['file'])->uploadFile();
                $data['filename'] = $image['filename'];
                $data['image_url'] = $image['file_url'];
            }

            $item->setTitle($data['title']);
            $item->setDescription($data['description']);

            $em->persist($item);
            $em->flush($item);

            return $item;
        }

    }

我总是得到这样一个错误:传递给构造函数的第三个参数为null

因为2.4版的条令使用了一个用于实例化存储库并作为启动程序提供给您的。为了能够向您的存储库中注入额外的依赖项,您需要自己实现上述工厂(为了简洁起见,我省略了所有
use
语句):

以您喜欢的方式将工厂注册为服务后,您需要调整
原则
配置:

doctrine:
    orm:
        repository_factory: name.of.your.factory.service

你可以走了

可能重复如何实例化自定义存储库?您需要将存储库定义为服务并添加setUploader方法。Stackoverflow有几百个示例说明了这里不需要@Cerad
setUploader
。它可以是一个构造函数参数,就像现在一样。@JakubMatczak创建条令存储库的唯一方法是使用DoctrineEntityManager::getRepository();你不能直接新建它。在内部,有一个用于创建新存储库的静态创建方法。因此,除非您想扩展实体管理器,然后克隆一个相当复杂的静态方法,否则确实需要使用setter注入。谢谢。有趣的是,这里记录了存储库工厂,但这里没有
doctrine:
    orm:
        repository_factory: name.of.your.factory.service