現在laravel側からgoogleカレンダーの予定を操作しようとしております。
予定作成時にイベントIDを取得しております。
登録はうまくいったものの、変更、削除の部分でイベントIDを使用しないといけないのですが
どのように受け渡せばよいか分からず困っております。
どなたかご教授頂ければと思います。
宜しくお願い致します。
参考にしたサイト
Google Calendar API を用いてLaravelアプリから予定を追加する手順
PHPからGoogleカレンダーに予定を追加・変更・削除する
使っているAPIはgooglecalendarAPIです。
class CalenderEventsController extends Controller{ //googleカレンダー APIインスタンス作成 public function getClient(){ $client = new Google_Client(); $client->setApplicationName('Google Calendar API plus Laravel'); $client->setScopes(Google_Service_Calendar::CALENDAR_EVENTS); $client->setAuthConfig(storage_path('app/google-calendar/'JSONファイル')); return $client; } //登録処理 public function store(Request $request){ /** googleカレンダーとの連携処理 **/ $client = $this->getClient(); $service = new Google_Service_Calendar($client); $calendarId = env('GOOGLE_CALENDAR_ID'); $google_event = new Google_Service_Calendar_Event(); //件名 $google_event->setSummary($request['title']); //内容 $google_event->setDescription($request['memo']); //色 $google_event->setColorId("1"); //開始時間 $start = new Google_Service_Calendar_EventDateTime(); $start->setDateTime($request['startdate']. 'T'.$request['starttime'] . '+09:00'); $google_event->setStart($start); //終了時間 $end = new Google_Service_Calendar_EventDateTime(); $end->setDateTime($request['enddate']. 'T'.$request['endtime'] . '+09:00'); $google_event->setEnd($end); //グーグルカレンダーに予定反映 $result = $service->events->insert($calendarId,$google_event); //イベントIDを取得する $google_event_id = $result->getId(); } //変更処理 public function update(Request request){ $client = $this->getClient(); $service = new Google_Service_Calendar($client); $calendarId = env('GOOGLE_CALENDAR_ID'); $google_event_id = ここに登録時のイベントIDを持ってきたい $google_event = new Google_Service_Calendar_Event(); //件名 $google_event->setSummary($request['title']); //内容 $google_event->setDescription($request['memo']); //色 $google_event->setColorId("1"); //開始時間 $start = new Google_Service_Calendar_EventDateTime(); $start->setDateTime($request['startdate']. 'T'.$request['starttime'] . '+09:00'); $google_event->setStart($start); //終了時間 $end = new Google_Service_Calendar_EventDateTime(); $end->setDateTime($request['enddate']. 'T'.$request['endtime'] . '+09:00'); $google_event->setEnd($end); //グーグルカレンダーに予定反映 $result = $service->events->update($calendarId,$google_event_id,$google_event); } }
追記
app/Services/GoogleCalendarService.php
<?php namespace App\Services; use Google\Exception; use Google_Client; use Google_Service_Calendar; use Google_Service_Calendar_Event; use Illuminate\Config\Repository; class GoogleCalendarService { /** * @var array */ private $config; /** * @var Google_Client */ private $client; /** * @var Google_Service_Calendar */ private $service; /** * @var */ private $calendar_id; /** * GoogleCalendarService constructor. * @param Repository $config * @throws Exception */ public function __construct(Repository $config) { /***このメソッド内で予定更新時のときに登録された予定を取得する必要があると予測 **/ $this->config = $config['google']; $this->client = new Google_Client(); $this->client->setApplicationName($this->config['app_name']); $this->client->setScopes(Google_Service_Calendar::CALENDAR_EVENTS); $this->client->setAuthConfig(storage_path('app/google-calendar/auth.json')); $this->service = new Google_Service_Calendar($this->client); $this->calendar_id = $this->config['calendar_id']; } /** * @param Google_Service_Calendar_Event $event * @return Google_Service_Calendar_Event */ public function addEvent(Google_Service_Calendar_Event $event): Google_Service_Calendar_Event { dd($event); /*** 確認 ***/ return $this->service->events->insert($this->calendar_id, $event); } /** * @param Google_Service_Calendar_Event $event * @return Google_Service_Calendar_Event */ public function updateEvent(Google_Service_Calendar_Event $event): Google_Service_Calendar_Event { dd($event); /***確認***/ return $this->service->events->update($this->calendar_id, $event->getId(), $event); } }
コントローラ
<?php namespace App\Http\Controllers; use App\Services\GoogleCalendarService; use Illuminate\Http\Request; class CalendarController extends Controller { private $service; /** * CalendarController constructor. * @param GoogleCalendarService $service */ public function __construct(GoogleCalendarService $service) { $this->service = $service; } /** * @param Request $request */ public function store(Request $request) { $this->service->addEvent($this->makeGoogleEvent($request)); } /** * @param Request $request */ public function update(Request $request) { $this->service->updateEvent($this->makeGoogleEvent($request)); } /** * @param Request $request * @return \Google_Service_Calendar_Event */ private function makeGoogleEvent(Request $request) { /*** ここでイベント更新時の時にもインスタンス化しているのが原因だと考えています。 ***/ $google_event = new \Google_Service_Calendar_Event(); if ($request->has('event_id')) { $google_event->setId($request->event_id); } $google_event->setSummary($request->title); $google_event->setDescription($request->memo); $google_event->setColorId('1'); $start = new \Google_Service_Calendar_EventDateTime(); $start->setTimeZone('Asia/Tokyo'); $start->setDateTime($request->startdate . ' ' . $request->starttime); $google_event->setStart($start); $end = new \Google_Service_Calendar_EventDateTime(); $end->setTimeZone('Asia/Tokyo'); $end->setDateTime($request['enddate'] . ' ' . $request['endtime']); $google_event->setEnd($end); return $google_event; } }