如何在 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('')
指令使用。
我有一个项目有 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('')
指令使用。