laravel blade模板 - 如何从扩展页面中删除部件

时间:2018-06-09 08:30:06

标签: laravel extend laravel-blade

注意:就像我在评论中说的那样,我正在开展相对较大的项目。我无法更改现有代码。只是尝试为一个页面添加一些代码块。

我有一个模板刀片。它有元产量。但也包括一个meta.blade.php,它包含所有元标记。但我不想在我的某些页面中加入元页面。有可视化模板:

my_template

<header>
    @yield('meta')
    @include('metapage')

    @yield('style')
    @yield('js')
</header>

my view.blade.php

@extends('my_template')

@section('meta')
    <meta description...>
@endsection

@section('style')
    //content
@endsection

@section('js')
    //content
@endsection

我的问题是:有没有办法做出这样的事情:

@extends('my_template')->except('metapage')

我知道没有类似的东西存在。但我需要那个。我希望有人能给我一个解决方案。

2 个答案:

答案 0 :(得分:1)

我有一定的解决方案:

  • 首先是创建多个模板并根据您的要求进行扩展。
  • 第二个是禁用子部件。
  • 第三个创建具有小东西的父模板,然后创建扩展父模板的子模板,并在此处执行额外的操作。根据需要使用它。

如果您正在处理现有项目并且您有很多页面,那么First&amp;第三个是更好的解决方案,因为你只能在前端进行更改,而不会影响类代码。

答案 1 :(得分:0)

您可以将元组件设为组件而不是包含组件,然后您的模板看起来会相同,例如您的视图。

@extends('my_template')

@section('meta')
    @component('meta')
        @slot('description', 'my amazing description')
    @endcomponent
@endsection

// other code here as usual

然后,您的组件负责检查存在的内容和不存在的内容,例如像这样:

@isset($description)
    <meta name="description" content="{{ $description }}">
@endisset

@isset($title)
    <title>{{ $title }}</title>
@endisset

// etc, the title is just an example

文档:https://laravel.com/docs/5.6/blade#components-and-slots