【发布时间】:2017-11-15 17:14:16
【问题描述】:
我正在使用带有自定义原则实体存储库的第三方捆绑包。它包含一个我想重写的功能,以根据我的需要对其进行自定义。 有没有人这样做过?我找不到任何有关覆盖实体存储库的文档。 为什么我需要这样做:来自该第三方包的服务调用此存储库函数并执行它。但我想改变其中的一部分。
我尝试了什么: 创建一个自己的实体存储库类:
namespace NotificationBundle\Entity;
use Doctrine\ORM\EntityRepository;
use Citrax\Bundle\DatabaseSwiftMailerBundle\Entity\Email;
use Citrax\Bundle\DatabaseSwiftMailerBundle\Entity\EmailRepository as BaseRepository;
class EmailRepository extends BaseRepository
{
public function markCompleteSending(Email $email)
{
$email->setStatus(Email::STATUS_COMPLETE);
$email->setSentAt(new \DateTime());
$email->setErrorMessage('');
$em = $this->getEntityManager();
$em->remove($email);
$em->flush();
}
}
它扩展了父存储库并只覆盖了这个函数,其余的我没有触及。然后我将该存储库注册为服务。 无论如何它不起作用! 还需要什么吗?请告诉我!我很高兴能得到一些帮助。
调用函数的位置:
public function flushQueue(Swift_Transport $transport, &$failedRecipients = null)
{
if (!$transport->isStarted())
{
$transport->start();
}
$count = 0;
$emails = $this->repository->getEmailQueue($this->getMessageLimit());
foreach($emails as $email){
/*@var $message \Swift_Mime_Message */
$message = $email->getMessage();
try{
$count_= $transport->send($message, $failedRecipients);
if($count_ > 0){
$this->repository->markCompleteSending($email);
$count += $count_;
}else{
throw new \Swift_SwiftException('The email was not sent.');
}
}catch(\Swift_SwiftException $ex){
$this->repository->markFailedSending($email, $ex);
}
}
return $count;
}
这就是类 DatabaseSpool 注册为我的 swiftmailer 假脱机的服务。
【问题讨论】:
-
我猜你需要在供应商的 git repo 上为这个功能打开一个问题
-
@MKhalidJunaid 好的。我认为这是一个更普遍的事情?
-
代码在哪里调用?
-
@Tokeeen.com 我添加了调用代码的函数! :)
标签: symfony doctrine repository overriding