Функция old
Функция old применяется в шаблонах Blade для извлечения значений, которые были отправлены через форму, но не прошли валидацию. Первым параметром передаётся имя поля, вторым - значение по умолчанию, которое будет использовано, если старых данных нет. Функция возвращает строку или массив данных, сохранённых в сессии после неудачного запроса.
Синтаксис
old($key, $default = null)
Пример
Давайте создадим форму регистрации с полями name и email, которые будут сохранять свои значения после ошибки валидации:
<form method="POST" action="/register">
@csrf
<div>
<label for="name">Name</label>
<input type="text" name="name" id="name" value="{{ old('name') }}">
</div>
<div>
<label for="email">Email</label>
<input type="email" name="email" id="email" value="{{ old('email') }}">
</div>
<button type="submit">Register</button>
</form>
После того как пользователь отправит форму с некорректными данными, поля name и email будут автоматически заполнены предыдущими значениями.
Пример
Рассмотрим использование второго параметра для установки значения по умолчанию, если старых данных нет:
<form method="POST" action="/profile">
@csrf
<div>
<label for="username">Username</label>
<input type="text" name="username" id="username" value="{{ old('username', 'guest') }}">
</div>
<div>
<label for="age">Age</label>
<input type="number" name="age" id="age" value="{{ old('age', 18) }}">
</div>
<button type="submit">Update</button>
</form>
В этом примере, если поле username не было отправлено ранее, будет использовано значение 'guest', а для поля age - значение 18.
Пример
Покажем использование функции old с checkbox и select:
<form method="POST" action="/settings">
@csrf
<div>
<label for="notifications">Notifications</label>
<input type="checkbox" name="notifications" id="notifications" value="1" @if(old('notifications')) checked @endif>
</div>
<div>
<label for="role">Role</label>
<select name="role" id="role">
<option value="user" @if(old('role') == 'user') selected @endif>User</option>
<option value="admin" @if(old('role') == 'admin') selected @endif>Admin</option>
</select>
</div>
<button type="submit">Save</button>
</form>
Здесь для checkbox проверяется наличие значения, а для select используется сравнение для установки атрибута selected.
Пример
Рассмотрим работу функции old с массивом данных:
<form method="POST" action="/tags">
@csrf
<div>
<label for="tags">Tags</label>
<input type="text" name="tags[]" id="tags" value="{{ old('tags.0') }}">
<input type="text" name="tags[]" value="{{ old('tags.1') }}">
<input type="text" name="tags[]" value="{{ old('tags.2') }}">
</div>
<button type="submit">Submit</button>
</form>
При работе с массивами полей можно использовать синтаксис с точкой для доступа к элементам. В примере выше поля tags[0], tags[1] и tags[2] получат свои соответствующие старые значения.