2011-12-12 38 views
1

我正在使用此代碼以及PHP-EWS在Exchange 2010郵箱上創建日曆項目。PHP-EWS SOAP響應是一個對象 - 如何獲取特定部分?

<?php 

include ("ExchangeWebServices.php"); 
include ("EWS_Exception.php"); 
include ("EWSType.php"); 
include ("NTLMSoapClient.php"); 
include ("NTLMStream.php"); 
include ("NTLMStream/Exchange.php"); 
include ("NTLMSoapClient/Exchange.php"); 

$host = "email.domain.com"; 
$username = "asdfasdf"; 
$password = "123"; 

$ews = new ExchangeWebServices($host, $username, $password); 

$request->SendMeetingInvitations = 'SendToNone'; 
$request->SavedItemFolderId->DistinguishedFolderId->Id = 'calendar'; 
$request->Items->CalendarItem->Subject = 'this is the subject of the email'; 
$request->Items->CalendarItem->Start = date('c', strtotime('today')); 

$request->Items->CalendarItem->End = date('c', strtotime('today + 1 day')); 
$request->Items->CalendarItem->IsAllDayEvent = true; 
$request->Items->CalendarItem->LegacyFreeBusyStatus = 'Free'; 
$request->Items->CalendarItem->Categories->String = $category; 
$request->Items->CalendarItem->Body->BodyType = 'Text'; 
$request->Items->CalendarItem->Body->_ = $body; 

$response = $ews->CreateItem($request); 

print_r($response); 

?> 

能正常工作,輸出到瀏覽器的響應是這樣的:

stdClass Object ([ResponseMessages] => stdClass Object ([CreateItemResponseMessage] => stdClass Object ([ResponseCode] => NoError [ResponseClass] => Success [Items] => stdClass Object ([CalendarItem] => stdClass Object ([ItemId] => stdClass Object ([Id] => AAASAHJydXVza2FAc3VicmFkLmNvbQBGAAAAAACyAesJgtiMR71+s/kuiAieBwBrnLmGR6RGTakOvWxNjsbfAAAAQwN1AABrnLmGR6RGTakOvWxNjsbfAABcYtppAAA= [ChangeKey] => DwAAABYAAABrnLmGR6RGTakOvWxNjsbfAABcYx9q)))))) 

我想的唯一的一塊是繼[Id] => 128字符串。如果我將此對象轉換爲字符串,我可以像這樣解析字符串:

$var = 'stdClass Object ([ResponseMessages] => stdClass Object ([CreateItemResponseMessage] => stdClass Object ([ResponseCode] => NoError [ResponseClass] => Success [Items] => stdClass Object ([CalendarItem] => stdClass Object ([ItemId] => stdClass Object ([Id] => AAASAHJydXVza2FAc3VicmFkLmNvbQBGAAAAAACyAesJgtiMR71+s/kuiAieBwBrnLmGR6RGTakOvWxNjsbfAAAAQwN1AABrnLmGR6RGTakOvWxNjsbfAABcYtpzAAA= [ChangeKey] => DwAAABYAAABrnLmGR6RGTakOvWxNjsbfAABcYzc4))))))'; 

$regex_pattern = "/ /"; 

$matches = preg_split($regex_pattern,$var); 

print_r($matches[36]); 

但是,我很難將對象轉換爲字符串。另外,如果響應稍有變化,我不會得到正確的返回值。查看Object的最佳方法是什麼,並返回[Id] =>後面的值?

回答

0

爲什麼你就不能這樣做:

$id = $response->ResponseMessages->CreateItemResponseMessage->Items->CalendarItem->ItemId->Id; 

的優點是,有沒有必要投對象的字符串,只得到您所需要的常用方法。另一個好處是,即使M $改變了某些東西,ID的返回方式也應該保持不變以保持向後兼容性,因此這將起作用。

當您編輯日曆項目時,響應幾乎相同,唯一不同的是響應消息類型是UpdateItemResponseMessage