symfony2とFOSUserBundleを使用しています。AJAXから呼び出されたeventlistenerからユーザーIDを取得する方法
通常、私はコントローラ
からユーザデータを取得することができ$user = $this->get('security.context')->getToken()->getUser();
または
$user = $this->container->get('security.context')->getToken()->getUser();
しかし、今、私は、Ajaxから呼び出されeventlistnerからユーザデータを取得したいです。
可能ですか?か否か?
マイソースはここにあります。
namespace Acme\MemberBundle\EventListener;
use ADesigns\CalendarBundle\Event\CalendarEvent;
use ADesigns\CalendarBundle\Entity\EventEntity;
use Doctrine\ORM\EntityManager;
class CalendarEventListener
{
private $entityManager;
public function __construct(EntityManager $entityManager)
{
$this->entityManager = $entityManager;
}
public function loadEvents(CalendarEvent $calendarEvent)
{
$startDate = $calendarEvent->getStartDatetime();
$endDate = $calendarEvent->getEndDatetime();
$user = $this->container->get('security.context')->getToken()->getUser();//it doesnt work
// load events using your custom logic here,
// for instance, retrieving events from a repository
$companyEvents = $this->entityManager->getRepository('UserBundle:MutorSche')
->createQueryBuilder('company_events')
->where('company_events.event_datetime BETWEEN :startDate and :endDate')
->setParameter('startDate', $startDate->format('Y-m-d H:i:s'))
->setParameter('endDate', $endDate->format('Y-m-d H:i:s'))
->getQuery()->getResults();
foreach($companyEvents as $companyEvent) {
// create an event with a start/end time, or an all day event
if ($companyEvent->getAllDayEvent() === false) {
$eventEntity = new EventEntity($companyEvent->getTitle(), $companyEvent->getStartDatetime(), $companyEvent->getEndDatetime());
} else {
$eventEntity = new EventEntity($companyEvent->getTitle(), $companyEvent->getStartDatetime(), null, true);
}
//optional calendar event settings
$eventEntity->setAllDay(true); // default is false, set to true if this is an all day event
$eventEntity->setBgColor('#FF0000'); //set the background color of the event's label
$eventEntity->setFgColor('#FFFFFF'); //set the foreground color of the event's label
$eventEntity->setUrl('http://www.google.com'); // url to send user to when event label is clicked
$eventEntity->setCssClass('my-custom-class'); // a custom class you may want to apply to event labels
//finally, add the event to the CalendarEvent for displaying on the calendar
$calendarEvent->addEvent($eventEntity);
}
}
}
@ nifrのアドバイスに従って。
私はその後、私はeventlistnerに2つ目の引数を渡したい
class CalendarEventListener
{
private $entityManager;
private $container;//add
public function __construct(
EntityManager $entityManager,
ContainerInterface $container)//add
{
$this->entityManager = $entityManager;
$this->container = $container;//add
}
ように私のソースコードに少し変更。 私はリスナーを作るためにservices.xmlを使用しています。 これに第2引数を追加するにはどうすればよいですか?
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services">
<services>
<service id="acme.memberbundle.calendar_listener" class="Acme\MemberBundle\EventListener\CalendarEventListener">
<argument type="service" id="doctrine.orm.entity_manager" />
<tag name="kernel.event_listener" event="calendar.load_events" method="loadEvents" />
</service>
</services>
</container>
はありがとう、私はほとんど私の場合.INそれを得る を@nifr、私は両方のEntityManagerのイベントリスナーに二つの引数を渡す必要があり、コンテナ ソースを変更してメイン記事に追加しました。よろしくお願いします。 – whitebear
複数の引数を追加することができます。別のxmlノード ' を追加することは可能ですが、2つの引数は必要ありません。コンテナも '$ this-> entityManager = $ container-> get( 'doctrine.orm.entity_manager')'をコンストラクタに入れてください。 –
nifr
私は参照してください。@ nifr ' 'サービス "acme.memberbundle.calendar_listener"は存在しないサービス "container"に依存しています。 ...あなたのご支援に感謝します。 –
whitebear