如何在 laravel 5 中正确扩展视图?

How do I extend views properly in laravel 5?

我有一个项目有 2 个登录表单,一个用于消费者,一个用于创作者。
两者都有不同的 "post-login" 区域。

但是视图应该看起来很相似,所以我想为什么不 DRY-it™。
QUESTION: 这是我的解决方案,但我相信还有更优雅的解决方案,如果有请赐教。

login.blade.php(主模板)

@extends('layout.app')

@section('styles')
    {{ Html::style('css/login.css') }} // This also looks deprecated, how do I have a specific css only for this page?
@stop

@section('content')
<div class="container">

      <form class="form-signin" action="{{ $loginAction }}"> //smells really bad
        <h2 class="form-signin-heading">Login {{ $loginTitle }}</h2>
...
@endsection

login_consumer.blade.php

@extends('layout.login', [
    'loginTitle' => 'Consumer',
    'loginAction' => 'login_consumers'
    ])

login_creator.blade.php

@extends('layout.login', [
    'loginTitle' => 'Creators',
    'loginAction' => 'login_creators' 
    ])

提前致谢

包含页眉、正文内容页脚的常见布局 app.blade.php 中有 @yields('') 指令允许您继承它并让您通过 @extends('') 指令扩展新内容。此外,您可以通过 @show@parent blade 指令追加主样式表,如下所示。

<!-- Stored in resources/views/layouts/app.blade.php -->

<html>
    <head>
        <title>App Name - @yield('title')</title>
        @section('stylesheets')
            <link rel="stylesheet" type="text/css" href="style.css"> <!-- this is master stylesheet -->
        @show
    </head>
    <body>
        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

扩展布局

<!-- Stored in resources/views/login.blade.php -->

@extends('layouts.app')

@section('title', 'Page Title')

@section('stylesheets')
    @parent

    <link rel="stylesheet" type="text/css" href="login.css">
@endsection

@section('content')
    <p>This is my body content.</p>
@endsection

现在,解释你问题的第二部分。上面的案例是关于一个通用布局的,但在这个案例中,您正在尝试实现通用的正文内容,因此有组件和插槽。将您的公共正文内容分隔为 component,并将变量作为 slot 传递。这来自 Laravel 5.4。以前,它被称为 partials,通过 @include('') 指令使用。

https://laravel.com/docs/5.5/blade#components-and-slots