Итак, вы на самом деле вызываете API снова, вы просто не итерации по результатам.
$shouldProcess = true;
$searchIndex = 0;
$items = [];
while ($shouldProcess) {
$processedThisLoop = 0;
$function_call = getPROsitemapsEntries($searchIndex);
$responseData = json_decode($function_call->getBody(), true);
foreach($responseData['result']['entries'] as $entries) {
$items[] = $entries;
$searchIndex++;
$processedThisLoop++;
}
if($processedThisLoop == 0) {
// Didn't find any so stop the loop
$shouldProcess = false;
}
}
var_dump($items);
В приведенном выше коде мы отслеживаем общее количество записей, которые мы обработали в $searchIndex
. Это позволит нам продолжать получать новые элементы вместо старых.
$shouldProcess
- это bool
, который будет определять, следует ли нам пытаться получить новые записи из API.
$items
- это массив, в котором будут храниться все записи из API.
$processedThisLoop
содержит количество записей, которые мы обработали в этом цикле, т. е. этот запрос к API имел записи для обработки? Если это не так, установите $shouldProcess
в false, и это остановит цикл while
.
Blade кэширует возвращаемую строку вашей пользовательской директивы, но если эта строка является PHP-кодом, она будет оценена при доступе к кэшированному представлению. Что вы можете сделать, это включить всю условную логику в возвращаемую строку, например:
\Blade::directive('signup_done', function () {
return "<?php if (\Auth::check() && \Auth::user()->signup_done) { ?>";
});
Возможно, это не лучшее решение, но оно должно работать.