【问题标题】:Laravel blade extend within extendLaravel 刀片在延伸范围内延伸
【发布时间】:2018-05-30 14:39:57
【问题描述】:

我有 2 个不同的布局文件要扩展。

app.blade.php是主要布局:

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <!-- Meta -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>@yield('title') | {{ config('app.name') }}</title>

    <!-- Styles -->
    <link rel="stylesheet" href="{{ asset('laraback/css/bootstrap.min.css') }}">
    <link rel="stylesheet" href="{{ asset('laraback/css/fontawesome.min.css') }}">
    <link rel="stylesheet" href="{{ asset('laraback/css/datatables.min.css') }}">
</head>
<body>

@yield('content')

<!-- Scripts -->
<script src="{{ asset('laraback/js/jquery.min.js') }}"></script>
<script src="{{ asset('laraback/js/popper.min.js') }}"></script>
<script src="{{ asset('laraback/js/bootstrap.min.js') }}"></script>
@stack('scripts')

</body>
</html>

form.blade.php 是我要使用的子布局:

<div class="container h-100">
    <div class="row h-100 justify-content-center align-items-center">
        <div class="col-6">
            <div class="card">
                <div class="card-body">
                    @yield('content')
                </div>
            </div>
        </div>
    </div>
</div>

这是我的表单代码:

@section('content')
    <form method="POST" action="{{ route('login') }}" novalidate>
        {{ csrf_field() }}

        <div class="form-group">
            <label for="email">Email</label>
            <input type="email" name="email" id="email" class="form-control">
        </div>

        <div class="form-group">
            <label for="password">Password</label>
            <input type="password" name="password" id="password" class="form-control">
        </div>

        <div class="form-check">
            <label class="form-check-label">
                <input type="checkbox" name="remember" class="form-check-input">
                Remember
            </label>
        </div>

        <button type="submit" class="btn btn-primary">Login</button>
        <a class="btn btn-link" href="{{ route('password.email') }}">Forgot Your Password?</a>
    </form>
@endsection

我知道我可以使用@extends('layouts.app') 来获取主布局中的表单,但是我将如何制作它以便我可以在app.blade.php 中扩展form.blade.php? (我知道这听起来令人困惑)。

这是我想要的结果示例:

<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
    <!-- Meta -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>@yield('title') | {{ config('app.name') }}</title>

    <!-- Styles -->
    <link rel="stylesheet" href="{{ asset('laraback/css/bootstrap.min.css') }}">
    <link rel="stylesheet" href="{{ asset('laraback/css/fontawesome.min.css') }}">
    <link rel="stylesheet" href="{{ asset('laraback/css/datatables.min.css') }}">
</head>
<body>

<div class="container h-100">
    <div class="row h-100 justify-content-center align-items-center">
        <div class="col-6">
            <div class="card">
                <div class="card-body">
                    <form method="POST" action="{{ route('login') }}" novalidate>
                        {{ csrf_field() }}

                        <div class="form-group">
                            <label for="email">Email</label>
                            <input type="email" name="email" id="email" class="form-control">
                        </div>

                        <div class="form-group">
                            <label for="password">Password</label>
                            <input type="password" name="password" id="password" class="form-control">
                        </div>

                        <div class="form-check">
                            <label class="form-check-label">
                                <input type="checkbox" name="remember" class="form-check-input">
                                Remember
                            </label>
                        </div>

                        <button type="submit" class="btn btn-primary">Login</button>
                        <a class="btn btn-link" href="{{ route('password.email') }}">Forgot Your Password?</a>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Scripts -->
<script src="{{ asset('laraback/js/jquery.min.js') }}"></script>
<script src="{{ asset('laraback/js/popper.min.js') }}"></script>
<script src="{{ asset('laraback/js/bootstrap.min.js') }}"></script>
@stack('scripts')

</body>
</html>

【问题讨论】:

    标签: php laravel blade laravel-blade


    【解决方案1】:

    在 app.blade.php 中,您可以像代码一样使用 @yield('content')。 app.blade.php 很完美。

    请在您的 form.blade.php 中进行如下修复。

    @extends('layouts.app')
    @section('content')
    <div class="container h-100">
        <div class="row h-100 justify-content-center align-items-center">
            <div class="col-6">
                <div class="card">
                    <div class="card-body">
                        @include('form_content')
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    @endsection
    

    并且您需要使用您的表单内容制作 form_content.blade.php 文件,而无需 @section 和 @endsection。

    <form method="POST" action="{{ route('login') }}" novalidate>
        {{ csrf_field() }}
    
        <div class="form-group">
            <label for="email">Email</label>
            <input type="email" name="email" id="email" class="form-control">
        </div>
    
        <div class="form-group">
            <label for="password">Password</label>
            <input type="password" name="password" id="password" class="form-control">
        </div>
    
        <div class="form-check">
            <label class="form-check-label">
                <input type="checkbox" name="remember" class="form-check-input">
                Remember
            </label>
        </div>
    
        <button type="submit" class="btn btn-primary">Login</button>
        <a class="btn btn-link" href="{{ route('password.email') }}">Forgot Your Password?</a>
    </form>
    

    然后就可以随心所欲的看到结果页面了。

    您可以使用@if 对您的@include 子句进行分类。 这意味着您可以为每个@include 创建一个条件子句。 因此,如果条件合适,您可以包含 @include 部分之一。

    【讨论】:

    • 使用此解决方案,我必须创建 2 个不同的文件才能显示相同的表单。
    • 2 个不同的文件是什么意思?
    • 我必须为每个要与子布局一起使用的表单创建单独的 form.blade.php 文件,因为 @include 每次都会不同。
    猜你喜欢
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多