Как отключить глобальный scope для одного контроллера?

Реализовал отдельным классом скоуп и подключил его в boot модели https://laravel.com/docs/6.x/eloquent#global-scopes
все прекрасно работает по всему проекту, теперь мне нужно для одного контроллера этот скоуп отключить, чтоб он не использовался в :
public function update(Post $post, Request $request) {}
public function delete(Post $post) {}

т.е. этот скоуп используется и во внедрении зависимости, а туда добавить условия сложновато.
Пока из идей: в boot контроллера запустить некий статичный метод нужной модели и передать что не нужно использовать скоуп.
/**
 * @inheritDoc
 */
protected static function boot(): void
{
    parent::boot();

    in_array(VisibleScope::class, self::$disabledGlobalScopes) || static::addGlobalScope(new VisibleScope());
}

/**
 * @var array
 */
protected static $disabledGlobalScopes = [];

/**
 * @param string $scope
 */
public static function disableGlobalScope(string $scope): void
{
    static::$disabledGlobalScopes[] = $scope;
}

Может проще вариант есть?
  • Вопрос задан
  • 253 просмотра
Пригласить эксперта
Ответы на вопрос 2
@NubasLol
https://laravel.com/docs/6.x/routing#route-model-b...

Варианты есть.

public function boot()
{
    parent::boot();

    Route::bind('page-no-scope', function ($value) {
        return App\Page::withoutGlobalScope()->firstOrFail();
    });
}
Ответ написан
Комментировать
JhaoDa
@JhaoDa
LaravelRUS Team
Может проще вариант есть?
Есть, он описан там же в документации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы