Обычное промежуточное ПО, использующее его в лезвии - PullRequest
0 голосов
/ 13 марта 2020

Как я могу использовать это обычное промежуточное ПО HouseOwnerMiddleware. Я думаю, что если я могу использовать @guest в лезвии, почему бы не использовать также @houesowner?

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,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'houseowner' => \App\Http\Middleware\HouseOwnerMiddleware::class, // THIS PART
    ];

Но я не могу этого сделать. Как бы вы порекомендовали мне его использовать?

@houseowner
<a class="dropdown-item" href="/houseowner/roomid/1/userid/{{Auth::id()}}/images/create">
     Upload images
</a>
@end

Пользовательское промежуточное ПО здесь, просто для упрощения я сделал утверждение if ИСТИНА. Таким образом, сейчас все будут проходить это утверждение.

class HouseOwnerMiddleware
{
    public function handle($request, Closure $next)
    {
        if(true){
            return $next($request);
        }
    }
}

1 Ответ

0 голосов
/ 13 марта 2020

Хм, я не уверен, что вы пытаетесь сделать здесь.


Middleware

A Middleware используется для применения logi c в середине запроса (например, проверка авторизации, добавление перенаправлений, изменение запрос). Промежуточное программное обеспечение, которое вы написали, будет работать, но ничего не делать с вашим запросом!

if (true) {
    return $next($request);
}

Условие if всегда будет проходить, но все, что он делает, это говорит: «перейти к следующей части запроса». "

Документацию по промежуточному программному обеспечению можно найти здесь


Директивы Blade

Если вы хотите расширить Blade и зарегистрируйте новые директивы, такие как @houseowner, вы должны сделать это в ServiceProvider, например AppServiceProvider, например:

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Blade::directive('houseowner', function ($expression) {
        // Return your custom markup here
        return "<?php echo "houseowner"; ?>";
    });
}

Документацию по расширению шаблонов Blade можно найти здесь


Blade Logi c

Я подозреваю, что вы пытаетесь сделать некоторые условные логики c для отображения тега a, если пользователь является «домовладельцем»?

Вы можете сделать это с помощью стандартных операторов blade-логики c, например, так:

@if (Auth::user->isHouseOwner())
<a class="dropdown-item" href="/houseowner/roomid/1/userid/{{Auth::id()}}/images/create">
     Upload images
</a>
@endif

Вам потребуется создать метод с именем isHouseOwner() на Ваша User модель, конечно.


Похоже, вы довольно плохо знакомы с Laravel, я настоятельно рекомендую некоторое время читал документацию. Удачи!

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