В Laravel появилась заметная небольшая, но очень удобная улучшение: теперь класс Fluent поддерживает прямую итерацию через реализацию контракта Iterable. Это означает, что вы можете использовать объекты Fluent в циклах foreach так же естественно, как обычные массивы, без необходимости сначала преобразовывать их в массивы.
Раньше работа с Fluent-объектами в подобных случаях выглядела громоздко: было нужно явно вызывать метод toArray(), чтобы получить массив для перебора. Это прерывало удобный плавный стиль работы с объектами и ухудшало читаемость кода. Новая реализация убирает это препятствие, делая код чище и более интуитивным.
Что изменилось
Раньше для перебора атрибутов Fluent-объекта приходилось сначала превращать его в массив:
// До — превращение в массив обязательно
foreach ($config->data->toArray() as $key => $value) {
echo "{$key}: {$value}\n";
}Теперь тот же код можно написать гораздо проще:
// Теперь можно перебирать напрямую
foreach ($config->data as $key => $value) {
echo "{$key}: {$value}\n";
}Это делает Fluent-объекты ближе к ожиданиям разработчиков, привыкших к поведению обычных массивов в PHP.
Почему это удобно
Поддержка прямой итерации особенно ценна, когда вы работаете с объёмными настройками, ответами API или любыми другими структурами данных, представленными через Fluent. Пример:
<?php
namespace App\Services;
use Illuminate\Support\Fluent;
class ConfigurationManager
{
public function getApplicationSettings(): Fluent
{
return new Fluent([
'app_name' => 'Laravel Application',
'version' => '2.1.0',
'debug_mode' => false,
'cache_enabled' => true,
'api_timeout' => 30,
'max_file_size' => '10MB',
]);
}
public function exportToJson(): string
{
$settings = $this->getApplicationSettings();
$data = [];
foreach ($settings as $key => $value) {
$data[$key] = $value;
}
return json_encode($data, JSON_PRETTY_PRINT);
}
}Здесь итерация по настройкам стала естественной частью логики, без лишних преобразований.
Простота в шаблонах Blade
Улучшение также отражается в Blade-шаблонах. Раньше в шаблоне приходилось писать так:
{{-- До — toArray() --}}
@foreach($applicationConfig->settings->toArray() as $key => $value)
<tr>
<td>{{ ucwords(str_replace('_', ' ', $key)) }}</td>
<td>{{ $value }}</td>
</tr>
@endforeachТеперь можно упростить до этого:
{{-- После — итерация напрямую --}}
@foreach($applicationConfig->settings as $key => $value)
<tr>
<td>{{ ucwords(str_replace('_', ' ', $key)) }}</td>
<td>{{ $value }}</td>
</tr>
@endforeachЭто делает представления более читаемыми и избавляет от лишних вызовов методов.