Получать пользователей из Azure AD

Я не могу понять, почему мой цикл не работает вообще. Я успешно подключился к своему клиентскому каталогу и могу выбрать некоторых пользователей. Я следовал за Инструкции PHP. Но этот учебник не включает в себя пример для извлечения всех пользователей только по умолчанию размер страницы 100 пользователей.

Я в курсе про skipToken (объяснил здесь) но по какой-то причине я не смог заставить его работать с моей петлей.

Сначала я определяю массив и два вложенных массива.

 $myArray = array();
$myArray['skipToken'] = "";
$myArray['users'] = "";

Затем я выполню первую выборку, чтобы получить skipToken и группу пользователей, которые придут.

 require_once("GraphServiceAccessHelper.php");
$users = GraphServiceAccessHelper::getFeed('users');

Вставка значений в уже существующие массивы.

 $myArray['skipToken'] = $users->{'odata.nextLink'};
$myArray['users'][] = $users->{'value'};

Теперь они заполнены информацией. Теперь пришло время зацикливаться!

 for($i = 0; $i < 2; $i++){
if($myArray['skipToken'] != ""){
$skipToken = $myArray['skipToken'];
require_once("GraphServiceAccessHelper.php");
$users = GraphServiceAccessHelper::getNextFeed('users', $skipToken);
$myArray['skipToken'] = $users->{'odata.nextLink'};
$myArray['users'][] = $users->{'value'};
}
}

Консоль запускается из-за ошибки, которая указывает на определяющую часть цикла skipToken:

Notice: Undefined property: stdClass::$odata.nextLink

$myArray['skipToken'] = $users->{'odata.nextLink'};

2

Решение

Хорошо, я понял это.

Сначала я должен был удалить все до фактического токена.

$skipToken = $users->{'odata.nextLink'};
$skipToken = substr($skipToken, strpos($skipToken, "=") + 1);

Затем внутри цикла использовать, чтобы получить новый skipToken и сделайте то же самое, что и выше:

$new = GraphServiceAccessHelper::getNextFeed('users', $skipToken);
if(isset($new->{'odata.nextLink'})){
$skipToken = empty($new->{'odata.nextLink'});
} else{
break;
}
$skipToken = substr($skipToken, strpos($skipToken, "=") + 1);
$myArray['tokens'] = $skipToken;
$myArray['users'][] = $new->{'value'};

Проверяя, если 'odata.nextLink" существует, я могу легко остановить цикл while, так как последняя страница не содержит 'odata.nextLink',

if(isset($new->{'odata.nextLink'})){
$skipToken = empty($new->{'odata.nextLink'});
} else{
break;
}

Я добавляю каждый массив из 100 пользователей в другой массив, который я могу легко вызвать, используя его вне PHP.

1

Другие решения

Других решений пока нет …