我是symfony 2的新手,通过文档,我正在努力创建一个通知服务来通知用户列表一些更新(用户实体与通知实体的OneToMany关系,只是为了使它清除)
这是服务类:
<?php
namespace OC\UserBundle\Services;
use OC\UserBundle\Entity\Notification;
use Doctrine\ORM\EntityManager as EntityManager;
class Notificateur
{
protected $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
public function notifier($text, $users)
{
foreach ($users as $user)
{
$notification=new Notification();
$notification->setDate(new \DateTime());
$notification->setText($text);
$notification->setStatus('1');
$notification->setUser($user);
$this->em->persist($notification);
}
$this->em->flush();
}
}
这就是我在我的bundle中的service.yml中定义服务的方式:
services
notificateur:
class: OC\UserBundle\Services\Notificateur
arguments: [ @doctrine.orm.entity_manager ]
这是我的控制器内的动作(仅用于测试,通知当前用户:
public function notifAction() {
$user=$this->getUser();
$notificateur=$this->get('notificateur');
$notificateur->notifier('your account is updated',$user);
Return new Response('OK');
}
当我执行app / console debug:container时,我可以在那里看到我的服务,但数据库中没有任何内容。 我不知道我错过了什么,如果你能帮助我,我将不胜感激。
答案 0 :(得分:3)
在通知中,您从$ this-&gt; getUser();
传递单个用户$notificateur->notifier('your account is updated',$user);
在您的服务中,您需要遍历一组用户,而不是一个用户。如果你想只做一个用户,那就可以了:
public function notifier($text, $user) {
$notification=new Notification();
$notification->setDate(new \DateTime());
$notification->setText($text);
$notification->setStatus('1');
$notification->setUser($user);
$this->em->persist($notification);
$this->em->flush();
}
答案 1 :(得分:1)
解决了这个问题。这是一个php问题,
我在notifier()函数中创建了一个数组,并将当前用户添加到它:
public function notifAction() {
$user=$this->getUser();
$users = array();
array_push($users, $user);
$notificateur=$this->get('notificateur');
$notificateur->notifier('your account is updated',$users);
Return new Response('OK');
}
这只是为了测试它是否有效,但主要目标是获取一个事件的订阅成员列表并通知所有成员,然后这些行:
$user=$this->getUser();
$users = array();
array_push($users, $user);
将被替换:用
$repository = $this->getDoctrine()
->getRepository(.....)
$list_users=$repository->find(....)
//
//
//
$notificateur=$this->get('notificateur');
$notificateur->notifier('your account is updated',$list_users);
Return new Response('OK');
希望这有助于那些需要使用symfony 2实现快速通知系统的人。