如何根据用户身份验证更改扩展哪个模板
How to change which template is extended based on user authentication
我正在使用 Laravel 6.20.11,并且我已经发布了 Laravel blade 错误模板。我需要做的是,如果用户通过身份验证,错误消息会扩展 internal-only 布局,如果没有,它会扩展 public 布局,如下所示:
@auth
@extends ('int-layouts.partials.wrapper')
@section ('error')
<div class="be-content">
<div class="main-content container-fluid">
<div class="container py-5">
<div class="row">
<div class="col-lg-8">
<div class="text-block">
<h1>404 - Not Found</h1>
<p class="text-muted text-uppercase mb-4">Sorry, we couldn't find the page you were looking for.
Please contact the administrator<br/>
Or go back to the <a class="navbar-brand py-1" href="/controlpanel/">Dashboard</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@endauth
@guest
@extends ('ext-layouts.master')
@section('error')
<div class="container py-5">
<div class="row">
<div class="col-lg-8">
<div class="text-block">
<h1>404</h1>
<p class="text-muted text-uppercase mb-4">Sorry,You are trying to reach the page that does not exist.<br>
Please contact the administrator <br/> Or go back to the <a class="navbar-brand py-1" href="/">Home Page</a></p>
</div>
</div>
</div>
</div>
@endsection
@endguest
我遇到的问题是,当我使用 abort(404)
或尝试访问不存在的路由来测试 404 错误时,错误消息显示两次并且页面继承了 int-layouts.partials.wrapper 即使用户未通过身份验证。
这是预期的行为还是我在 blade 文件中做错了什么?
您可以尝试在一个 @extends
指令中使用条件:
@extends (auth()->check() ? 'int-layouts.partials.wrapper' : 'ext-layouts.master')
然后您可以在您的部分中在此之后使用条件句。
@section('error')
@auth
@else
@endif
@endsection
@extends
指令实际上并不像大多数指令那样将输出直接返回到编译结果中。为此编译的 PHP 保存在一个数组中,稍后添加。
指令 ( )
中的所有内容都被用作在视图工厂上调用 make
的文字:
"<?php echo $__env->make({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>"
如果您找到此 Blade 模板的编译视图,您会看到:
<?php echo $__env->make(auth()->check ? 'int-layouts.partials.wrapper' : 'ext-layouts.master', \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>
执行此编译视图时,make
的第一个参数最终成为您的视图名称。
在控制器函数中:
$layouts = Auth::user->admin ? 'view.admin' : 'view.student'; //
view.admin 或 view.student 是您要渲染的 blade 文件
动态地。
return view('welcome',compact('layouts'));
写入Blade文件:
@extends($layouts)
@section('...')
...
@endsection
我正在使用 Laravel 6.20.11,并且我已经发布了 Laravel blade 错误模板。我需要做的是,如果用户通过身份验证,错误消息会扩展 internal-only 布局,如果没有,它会扩展 public 布局,如下所示:
@auth
@extends ('int-layouts.partials.wrapper')
@section ('error')
<div class="be-content">
<div class="main-content container-fluid">
<div class="container py-5">
<div class="row">
<div class="col-lg-8">
<div class="text-block">
<h1>404 - Not Found</h1>
<p class="text-muted text-uppercase mb-4">Sorry, we couldn't find the page you were looking for.
Please contact the administrator<br/>
Or go back to the <a class="navbar-brand py-1" href="/controlpanel/">Dashboard</a></p>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@endauth
@guest
@extends ('ext-layouts.master')
@section('error')
<div class="container py-5">
<div class="row">
<div class="col-lg-8">
<div class="text-block">
<h1>404</h1>
<p class="text-muted text-uppercase mb-4">Sorry,You are trying to reach the page that does not exist.<br>
Please contact the administrator <br/> Or go back to the <a class="navbar-brand py-1" href="/">Home Page</a></p>
</div>
</div>
</div>
</div>
@endsection
@endguest
我遇到的问题是,当我使用 abort(404)
或尝试访问不存在的路由来测试 404 错误时,错误消息显示两次并且页面继承了 int-layouts.partials.wrapper 即使用户未通过身份验证。
这是预期的行为还是我在 blade 文件中做错了什么?
您可以尝试在一个 @extends
指令中使用条件:
@extends (auth()->check() ? 'int-layouts.partials.wrapper' : 'ext-layouts.master')
然后您可以在您的部分中在此之后使用条件句。
@section('error')
@auth
@else
@endif
@endsection
@extends
指令实际上并不像大多数指令那样将输出直接返回到编译结果中。为此编译的 PHP 保存在一个数组中,稍后添加。
指令 ( )
中的所有内容都被用作在视图工厂上调用 make
的文字:
"<?php echo $__env->make({$expression}, \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>"
如果您找到此 Blade 模板的编译视图,您会看到:
<?php echo $__env->make(auth()->check ? 'int-layouts.partials.wrapper' : 'ext-layouts.master', \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?>
执行此编译视图时,make
的第一个参数最终成为您的视图名称。
在控制器函数中: $layouts = Auth::user->admin ? 'view.admin' : 'view.student'; // view.admin 或 view.student 是您要渲染的 blade 文件 动态地。
return view('welcome',compact('layouts'));
写入Blade文件:
@extends($layouts)
@section('...')
...
@endsection