Директива case
Директива case применяется внутри директивы switch и позволяет выполнять блок кода при совпадении значения переменной с заданным условием. Она работает аналогично оператору case в обычном PHP. После проверяемого значения указывается блок HTML или Blade-кода, который будет выведен при совпадении. Для завершения блока используется директива break. Директива default определяет блок кода, который выполняется, если ни одно из условий не подошло.
Синтаксис
@switch($variable)
@case($value1)
HTML или Blade-код
@break
@case($value2)
HTML или Blade-код
@break
@default
HTML или Blade-код
@endswitch
Пример
Давайте определим блок вывода в зависимости от статуса статьи в представлении:
@php
$status = 'published';
@endphp
@switch($status)
@case('draft')
<p>Статья находится в черновиках.</p>
@break
@case('pending')
<p>Статья ожидает модерации.</p>
@break
@case('published')
<p>Статья опубликована.</p>
@break
@default
<p>Неизвестный статус.</p>
@endswitch
Результат выполнения кода:
<p>Статья опубликована.</p>
Пример
Рассмотрим более сложный пример с использованием динамической переменной, переданной из контроллера:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function show($id)
{
$res = $id % 3;
return view('article', ['res' => $res]);
}
}
?>
@switch($res)
@case(1)
<p>Остаток от деления на 3 равен 1.</p>
@break
@case(2)
<p>Остаток от деления на 3 равен 2.</p>
@break
@default
<p>Остаток от деления на 3 равен 0.</p>
@endswitch
Результат выполнения кода для $id = 5:
<p>Остаток от деления на 3 равен 2.</p>
Результат выполнения кода для $id = 3:
<p>Остаток от деления на 3 равен 0.</p>
Пример
Директива case поддерживает также множественные условия через запятую:
@php
$role = 'admin';
@endphp
@switch($role)
@case('admin')
@case('moderator')
<p>У вас есть доступ к панели управления.</p>
@break
@case('user')
<p>У вас есть доступ к личному кабинету.</p>
@break
@default
<p>У вас нет прав доступа.</p>
@endswitch
Результат выполнения кода:
<p>У вас есть доступ к панели управления.</p>