Метод patch
Метод patch класса Route регистрирует маршрут, который реагирует на входящие HTTP-запросы с методом PATCH. Этот метод обычно используется для частичного обновления ресурсов, когда клиент отправляет только те поля, которые необходимо изменить. Первым параметром передаётся URI маршрута, вторым - вызываемый обработчик, который может быть замыканием или строкой, указывающей на контроллер и метод.
Синтаксис
<?php
use Illuminate\Support\Facades\Route;
Route::patch($uri, $action);
?>
Пример
Давайте зарегистрируем простой маршрут, который обрабатывает PATCH-запросы по адресу '/user/{id}' и возвращает приветственное сообщение:
<?php
use Illuminate\Support\Facades\Route;
Route::patch('/user/{id}', function ($id) {
return "User $id has been partially updated";
});
?>
Результат выполнения кода при PATCH-запросе на '/user/5':
"User 5 has been partially updated"
Пример
Давайте зарегистрируем маршрут, который использует контроллер для обработки частичного обновления ресурса:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
Route::patch('/user/{id}', [UserController::class, 'updatePartial']);
?>
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
public function updatePartial(Request $request, $id)
{
$validated = $request->validate([
'name' => 'sometimes|string|max:255',
'email' => 'sometimes|email|unique:users,email,' . $id,
]);
// Logic for partial user update
return response()->json([
'message' => "User $id partially updated",
'data' => $validated
]);
}
}
?>
Результат выполнения кода при PATCH-запросе с JSON-телом:
{
"message": "User 10 partially updated",
"data": {
"name": "John Doe"
}
}
Пример
Давайте зарегистрируем группу маршрутов с общим префиксом, используя метод patch для частичного обновления нескольких ресурсов:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;
use App\Http\Controllers\CommentController;
Route::prefix('api/v1')->group(function () {
Route::patch('/posts/{id}', [PostController::class, 'updatePartial']);
Route::patch('/comments/{id}', [CommentController::class, 'updatePartial']);
});
?>
Результат выполнения кода при PATCH-запросе на '/api/v1/posts/3':
{
"message": "Post 3 partially updated",
"data": {
"title": "Updated title",
"content": "Updated content"
}
}