Директива readonly
Директива readonly в Laravel Blade представляет собой удобную сокращённую запись для добавления атрибута readonly к элементам форм. Она часто применяется совместно с директивами old и checked для упрощения работы с формами. Директива автоматически добавляет атрибут readonly, если переданное условие истинно.
Синтаксис
<input type="text" @readonly($condition)>
Пример
Давайте создадим поле ввода, которое будет доступно только для чтения, если пользователь не является администратором:
<form method="POST" action="/update">
@csrf
<input type="text" name="username" value="JohnDoe" @readonly(!auth()->user()->isAdmin)>
<button type="submit">Update</button>
</form>
Результат выполнения кода для обычного пользователя:
<form method="POST" action="/update">
<input type="hidden" name="_token" value="...">
<input type="text" name="username" value="JohnDoe" readonly>
<button type="submit">Update</button>
</form>
Пример
Используем директиву readonly с проверкой через isset для отключения поля редактирования:
@php
$isLocked = isset($user) && $user->is_locked;
@endphp
<input type="text" name="email" value="{{ $user->email ?? '' }}" @readonly($isLocked)>
Результат выполнения кода, если пользователь заблокирован:
<input type="text" name="email" value="john@example.com" readonly>
Пример
Директива readonly может быть использована с элементами textarea и select:
<form method="POST" action="/posts/{{ $post->id }}">
@csrf
@method('PUT')
<textarea name="content" @readonly($post->is_published)>{{ $post->content }}</textarea>
<select name="category_id" @readonly($post->is_published)">
@foreach ($categories as $category)
<option value="{{ $category->id }}" @selected($category->id === $post->category_id)>
{{ $category->name }}
</option>
@endforeach
</select>
</form>
Результат выполнения кода для опубликованной статьи:
<form method="POST" action="/posts/1">
<input type="hidden" name="_token" value="...">
<input type="hidden" name="_method" value="PUT">
<textarea name="content" readonly>Article content</textarea>
<select name="category_id" readonly>
<option value="1" selected>News</option>
<option value="2">Blog</option>
</select>
</form>