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