Правило file
Правило file применяется к полю формы, которое должно содержать загруженный файл. Оно проверяет, что переданные данные являются экземпляром класса UploadedFile и файл был успешно загружен на сервер. Это правило часто используется в сочетании с другими правилами валидации файлов, такими как mimes, max, min и image.
Правило не принимает никаких параметров. Оно просто проверяет наличие файла и его успешную загрузку. Если поле не содержит файл или файл был загружен с ошибкой, валидация не пройдёт.
Синтаксис
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'field_name' => 'file',
]);
?>
Пример
Давайте создадим форму загрузки аватара пользователя. В контроллере мы проверим, что поле 'avatar' содержит файл:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class UserController extends Controller
{
public function updateAvatar(Request $request)
{
$validator = Validator::make($request->all(), [
'avatar' => 'file',
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
$path = $request->file('avatar')->store('avatars', 'public');
return response()->json([
'message' => 'Avatar uploaded successfully',
'path' => $path,
]);
}
}
?>
Результат выполнения кода при успешной загрузке файла:
{"message":"Avatar uploaded successfully","path":"avatars/QW3rT5yU8iOp.jpg"}
Результат выполнения кода, если поле не содержит файл:
{"errors":{"avatar":["The avatar must be a file."]}}
Пример с использованием Form Request
Давайте создадим отдельный класс запроса для валидации аватара:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class AvatarRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'avatar' => ['file', 'mimes:jpg,jpeg,png', 'max:2048'],
];
}
}
?>
<?php
namespace App\Http\Controllers;
use App\Http\Requests\AvatarRequest;
class UserController extends Controller
{
public function updateAvatar(AvatarRequest $request)
{
$path = $request->file('avatar')->store('avatars', 'public');
return response()->json([
'message' => 'Avatar updated successfully',
'path' => $path,
]);
}
}
?>
Пример с использованием класса Rule
Правило file также доступно через фасад Rule. Это может быть удобно для более сложных сценариев или при использовании в массиве правил:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class FileController extends Controller
{
public function upload(Request $request)
{
$validator = Validator::make($request->all(), [
'document' => [
Rule::file(),
'mimes:pdf,doc,docx',
'max:10240',
],
]);
if ($validator->fails()) {
return back()->withErrors($validator)->withInput();
}
$path = $request->file('document')->store('documents', 'private');
return redirect()->route('documents.index')
->with('success', 'Document uploaded successfully');
}
}
?>