РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
419 of 1392 menu

Метод scopeBindings

Метод scopeBindings применяется к объекту маршрута и включает механизм автоматической привязки моделей с учётом области видимости. Это позволяет автоматически разрешать зависимости модели на основе ранее связанных моделей в том же маршруте. Метод принимает параметр $bindings, который определяет, какие параметры должны быть связаны через область видимости.

Синтаксис

<?php Route::scopeBindings($bindings); ?>

Пример

Рассмотрим базовый пример автоматической привязки с областью видимости. У нас есть модели User и Post, где Post принадлежит User. Мы хотим получить пост конкретного пользователя:

<?php use App\Models\Post; use App\Models\User; use Illuminate\Support\Facades\Route; Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) { return $post; })->scopeBindings(); ?>

Пример

В этом примере маршрут автоматически проверит, что пост принадлежит указанному пользователю. Если связь не существует, будет возвращена ошибка 404:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; class Post extends Model { public function user(): BelongsTo { return $this->belongsTo(User::class); } } ?>

Результат выполнения кода при запросе к /users/1/posts/5, если пост с id=5 принадлежит пользователю с id=1:

"App\Models\Post object"

Пример

Метод можно использовать с неявной привязкой нескольких моделей в группе маршрутов:

<?php use App\Models\Category; use App\Models\Post; use App\Models\User; use Illuminate\Support\Facades\Route; Route::prefix('users')->scopeBindings()->group(function () { Route::get('/{user}/posts/{post}', function (User $user, Post $post) { return $post; }); Route::get('/{user}/posts/{post}/categories/{category}', function (User $user, Post $post, Category $category) { return $category; }); }); ?>

Пример

Метод можно использовать с кастомными ключами для привязки моделей:

<?php use App\Models\Post; use App\Models\User; use Illuminate\Support\Facades\Route; Route::get('/users/{user:username}/posts/{post:slug}', function (User $user, Post $post) { return $post; })->scopeBindings(); ?>

Результат выполнения кода при запросе к /users/john/posts/my-article, если пост принадлежит пользователю с username 'john':

"App\Models\Post object"

Смотрите также

  • метод bind,
    который регистрирует кастомную привязку модели
  • метод where,
    который добавляет ограничения на параметры маршрута
  • метод whereNumber,
    который ограничивает параметр целым числом
  • метод whereUuid,
    который ограничивает параметр UUID форматом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить