Laravel: Добавьте глобальную область видимости в Модели, если запущено определенное промежуточное ПО - PullRequest
2 голосов
/ 02 ноября 2019

Можно ли включить глобальную область на основе того, применяется ли промежуточное ПО или нет?

У меня есть глобальная область, которую я хотел бы включить для определенной части моего сайта и отключить для остальных (клиент против области администратора), и я думаю, можно ли это сделать, проверив, запущено промежуточное программное обеспечение «EnableGlobalScopeMiddleware» или нет?

1 Ответ

4 голосов
/ 02 ноября 2019

Да, создайте промежуточное ПО EnableGlobalScopeMiddleware

php artisan make:middleware EnableGlobalScopeMiddleware

и примените глобальную область действия к моделям в функции handle

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Database\Eloquent\Model;

class EnableGlobalScopeMiddleware
{
    public function handle($request, Closure $next)
    {
        Model::addGlobalScope('foo', function (Builder $builder) {
            $builder->where('foo', 'bar');
        });

        return $next($request);
    }
}

Зарегистрируйте промежуточное ПО вApp\Http\Kernel добавив его к защищенному $routeMiddleware свойству массива

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'global' => \App\Http\Middleware\EnableGlobalScopeMiddleware::class, // <-- Here
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];

и примените к нему определенные маршруты, например /admin префиксная группа маршрутов

Route::middleware(['global'])->prefix('admin')->group(function () {
    // Routes here
});

Надеждаэто помогает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...