在 blade 中使用它的自定义中间件

Custome Middleware using it in blade

如何使用这个客户中间件HouseOwnerMiddleware。我的想法是,如果我可以在 blade 中使用 @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 语句设置为 TRUE。所以大家暂时通过这个声明吧。

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

嗯,我不确定你想在这里做什么。


中间件

A Middleware 用于在请求中间应用逻辑(例如检查授权、添加重定向、修改请求)。 您编写的中间件将运行但不执行您的请求!

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

if 条件总是会通过,但它所做的只是说 "move onto the next part of the request"

可以找到有关中间件的文档here


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 模板的文档 here


Blade逻辑

我怀疑你试图做的是一些条件逻辑,如果用户是 "houseowner"?

则显示 a 标签

您可以使用标准 blade 逻辑语句来执行此操作,如下所示:

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

当然,您需要在 User 模型上创建一个名为 isHouseOwner() 的方法。


听起来您对 Laravel 还很陌生,我强烈建议您花一些时间阅读文档。祝你好运!