Директива disabled
Директива disabled в Laravel Blade предназначена для условного добавления
атрибута disabled к HTML-элементам. Она особенно полезна для управления
состоянием полей ввода, кнопок и других интерактивных элементов на основе
данных из контроллера. В отличие от ручного добавления атрибута через
тернарный оператор, директива предоставляет более чистый и понятный синтаксис.
Синтаксис
<input @disabled($condition) />
Директива принимает один параметр - условие, которое определяет,
добавлять ли атрибут disabled к элементу. Если условие
возвращает true, атрибут добавляется со значением disabled.
Если условие возвращает false, атрибут не добавляется.
Пример
Рассмотрим базовый пример использования директивы disabled
для блокировки кнопки отправки формы:
<form action="/submit" method="POST">
@csrf
<input type="text" name="name" placeholder="Enter name" />
<button type="submit" @disabled(!$hasName)>Submit</button>
</form>
Результат выполнения кода при $hasName равном false:
<form action="/submit" method="POST">
<input type="hidden" name="_token" value="..." />
<input type="text" name="name" placeholder="Enter name" />
<button type="submit" disabled>Submit</button>
</form>
Результат выполнения кода при $hasName равном true:
<form action="/submit" method="POST">
<input type="hidden" name="_token" value="..." />
<input type="text" name="name" placeholder="Enter name" />
<button type="submit">Submit</button>
</form>
Пример
Давайте заблокируем поле ввода, если пользователь не авторизован:
<div>
<label for="email">Email address</label>
<input type="email" id="email" name="email"
value="{{ $user->email }}"
@disabled(!Auth::check()) />
</div>
Результат выполнения кода для авторизованного пользователя:
<div>
<label for="email">Email address</label>
<input type="email" id="email" name="email" value="user@example.com" />
</div>
Результат выполнения кода для гостя:
<div>
<label for="email">Email address</label>
<input type="email" id="email" name="email" value="user@example.com" disabled />
</div>
Пример
Используем директиву disabled для управления состоянием
нескольких элементов в зависимости от роли пользователя:
@php
$isAdmin = Auth::user()->role === 'admin';
$isActive = $settings->status === 'active';
@endphp
<div>
<input type="text" name="username" @disabled(!$isAdmin) />
<select name="status" @disabled(!$isActive || !$isAdmin)>
<option value="active">Active</option>
<option value="inactive">Inactive</option>
</select>
<button type="submit" @disabled(!$isAdmin)>Save settings</button>
</div>
Результат выполнения кода для обычного пользователя:
<div>
<input type="text" name="username" disabled />
<select name="status" disabled>
<option value="active">Active</option>
<option value="inactive">Inactive</option>
</select>
<button type="submit" disabled>Save settings</button>
</div>