Директива switch
Директива @switch используется в Blade-шаблонах для сравнения переменной с множеством значений и выполнения соответствующего блока кода. В паре с ней используются директивы @case, @break и @default. Директива принимает один параметр - выражение, значение которого сравнивается с вариантами в блоках @case. При совпадении выполняется код внутри блока до ближайшей директивы @break. Если ни один вариант не подошёл, выполняется блок @default.
Синтаксис
@switch($variable)
@case('value1')
<p>Value is 1</p>
@break
@case('value2')
<p>Value is 2</p>
@break
@default
<p>Value is unknown</p>
@endswitch
Пример
Рассмотрим базовое использование директивы @switch для отображения статуса пользователя:
@php
$status = 'active';
@endphp
<h1>User Profile</h1>
@switch($status)
@case('active')
<p>User is active</p>
@break
@case('inactive')
<p>User is inactive</p>
@break
@case('banned')
<p>User is banned</p>
@break
@default
<p>Unknown status</p>
@endswitch
Результат выполнения кода:
<h1>User Profile</h1>
<p>User is active</p>
Пример
Использование нескольких вариантов для одного блока кода с помощью падения через блоки @case:
@php
$orderStatus = 2;
@endphp
@switch($orderStatus)
@case(0)
@case(1)
<p>Order is pending</p>
@break
@case(2)
<p>Order is processing</p>
@break
@case(3)
<p>Order is completed</p>
@break
@default
<p>Unknown order status</p>
@endswitch
Результат выполнения кода:
<p>Order is processing</p>
Пример
Использование директивы @switch с данными из переменной, переданной из контроллера:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function show($id)
{
$role = 'admin';
return view('user.show', ['role' => $role]);
}
}
?>
@switch($role)
@case('admin')
<h2>Administrator Panel</h2>
@break
@case('editor')
<h2>Editor Dashboard</h2>
@break
@case('user')
<h2>User Profile</h2>
@break
@default
<h2>Guest View</h2>
@endswitch
Результат выполнения кода:
<h2>Administrator Panel</h2>
Пример
Применение директивы @switch для отображения разных блоков в зависимости от типа сообщения:
@php
$messageType = 'error';
@endphp
<div class="message-container">
@switch($messageType)
@case('success')
<div class="alert alert-success">Operation completed successfully</div>
@break
@case('warning')
<div class="alert alert-warning">Please check your input</div>
@break
@case('error')
<div class="alert alert-danger">An error has occurred</div>
@break
@default
<div class="alert alert-info">Information message</div>
@endswitch
</div>
Результат выполнения кода:
<div class="message-container">
<div class="alert alert-danger">An error has occurred</div>
</div>