我如何使用此自定义中间件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语句设为TRUE。因此,每个人现在都可以通过此声明。
class HouseOwnerMiddleware
{
public function handle($request, Closure $next)
{
if(true){
return $next($request);
}
}
}
嗯,我不确定您要在这里做什么。
中间件
A Middleware
用于在请求中间应用逻辑(例如,检查授权,添加重定向,修改请求)。 您编写的中间件将运行,但对您的请求不起作用!
if (true) {
return $next($request);
}
if条件将始终通过,但是它所做的只是说“移至请求的下一部分”
关于中间件的文档可以找到here
刀片指令
如果要扩展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"; ?>";
});
}
有关扩展刀片模板的文档可以找到here
刀片逻辑
我怀疑您要尝试做的是一些条件逻辑,如果用户是“房主”,则显示a
标签?
您可以使用标准刀片逻辑语句执行此操作,如下所示:
@if (Auth::user->isHouseOwner())
<a class="dropdown-item" href="/houseowner/roomid/1/userid/{{Auth::id()}}/images/create">
Upload images
</a>
@endif
您当然需要在isHouseOwner()
模型上创建一个名为User
的方法。
听起来您是Laravel的新手,我强烈建议您花些时间阅读文档。祝你好运!