Директива forelse
Директива forelse в Blade представляет собой комбинацию конструкций foreach и empty. Она позволяет перебрать элементы массива или коллекции, а в случае, если переданная переменная пуста или не содержит элементов, отобразить блок кода, указанный после директивы empty. Первым параметром передаётся переменная для итерации с использованием синтаксиса $item as $value, где $item - перебираемый массив или коллекция, а $value - текущий элемент.
Синтаксис
@forelse ($items as $item)
{{ $item }}
@empty
<p>No items found</p>
@endforelse
Пример
Выведем список статей, а если их нет, покажем сообщение:
<ul>
@forelse ($articles as $article)
<li>{{ $article->title }}</li>
@empty
<li>No articles available</li>
@endforelse
</ul>
Результат выполнения кода при наличии статей:
<ul>
<li>Article 1</li>
<li>Article 2</li>
<li>Article 3</li>
</ul>
Результат выполнения кода при пустом массиве:
<ul>
<li>No articles available</li>
</ul>
Пример
Используем директиву forelse для вывода пользователей с проверкой наличия данных:
<div class="users-list">
@forelse ($users as $user)
<p>User: {{ $user->name }}</p>
@empty
<p>No registered users</p>
@endforelse
</div>
Пример контроллера, передающего данные в представление:
<?php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{
public function index()
{
$users = User::all();
return view('users.list', ['users' => $users]);
}
}
?>
Результат выполнения кода при наличии пользователей:
<div class="users-list">
<p>User: John Doe</p>
<p>User: Jane Smith</p>
<p>User: Bob Johnson</p>
</div>
Результат выполнения кода при отсутствии пользователей:
<div class="users-list">
<p>No registered users</p>
</div>
Пример
Директива forelse также поддерживает переменную $loop, которая предоставляет информацию о текущей итерации:
@forelse ($categories as $category)
<p>Category {{ $loop->iteration }}: {{ $category->name }}</p>
@empty
<p>No categories found</p>
@endforelse
Результат выполнения кода:
<p>Category 1: Technology</p>
<p>Category 2: Science</p>
<p>Category 3: Art</p>