【问题标题】:How do I extend views properly in laravel 5?如何在 laravel 5 中正确扩展视图?
【发布时间】:2018-02-18 08:59:10
【问题描述】:

我有一个项目,它有 2 个登录表单,一个用于消费者,一个用于创建者。
两者都有不同的“登录后”区域。

但是视图应该看起来很相似,所以我想为什么不 DRY-it™。
问题这是我的解决方案,但我相信还有一个更优雅解决办法,有的话请赐教。

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' 
    ])

提前致谢

【问题讨论】:

    标签: laravel templates laravel-5 blade


    【解决方案1】:

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

    <!-- 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

    【讨论】:

    • 登录正文不完全一样,动作不一样,有什么变化吗?
    • 将 url/方法作为插槽传递
    • 如果我想传递更多变量怎么办?插槽不够精确。
    • 我没有真正理解你
    • 你能给我看一个有两个参数的例子,而不是发送整个表格吗?
    猜你喜欢
    • 2015-12-18
    • 2018-02-01
    • 1970-01-01
    • 2017-09-28
    • 2014-09-02
    • 2016-06-18
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    相关资源
    最近更新 更多