Laravel 如何更改基于用户身份验证扩展的模板

Laravel 如何更改基于用户身份验证扩展的模板,laravel,laravel-blade,laravel-6,Laravel,Laravel Blade,Laravel 6,我正在使用Laravel 6.20.11,我已经发布了Laravel刀片错误模板。我需要做的是,如果用户经过身份验证,错误消息将扩展仅内部布局,如果没有,它将扩展公共布局,如下所示: @auth @extends ('int-layouts.partials.wrapper') @section ('error') <div class="be-content"> <div class="ma

我正在使用Laravel 6.20.11,我已经发布了Laravel刀片错误模板。我需要做的是,如果用户经过身份验证,错误消息将扩展仅内部布局,如果没有,它将扩展公共布局,如下所示:

@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
@auth
@扩展('int-layouts.partials.wrapper')
@节(“错误”)
404-找不到

很抱歉,我们找不到您要查找的页面。 请与管理员联系
还是回到家里去

@端部 @endauth @客人 @扩展('ext-layouts.master') @节(“错误”) 404

抱歉,您正在尝试访问不存在的页面。
请联系管理员
或返回

@端部 @终客
我遇到的问题是,当我使用
abort(404)
测试404错误或尝试访问不存在的路由时,错误消息会显示两次,即使用户未经过身份验证,页面也会继承int-layouts.partials.wrapper


这是预期的行为还是我在刀片文件中做错了什么?

您可以尝试在一个
@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(); ?>"
“”
如果找到此刀片模板的编译视图,您将看到:

<?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是要渲染的刀片文件 动态地

return view('welcome',compact('layouts'));
 
写入刀片文件:

@extends($layouts)
@section('...')
...
@endsection

伟大的我不知道您可以向@extends指令添加参数。非常感谢。请在你的答案中添加一些解释,以便其他人可以从中学习