如何在Laravel的@extends @section @yield帮助下共享所有页面的数据?

时间:2017-05-03 09:17:25

标签: php laravel blade laravel-blade

如何在Laravel中使用@extends @section @yield帮助共享所有网页的数据?例如,有1个控制器。它显示所有新闻,所有评论,所有用户。该控制器继承主层(layouts.app)。如何让所有其他页面继承此数据?

如何使other.blade.php页面包含来自main.blade.php页面的数据?一个简单的例子:

// layouts.app.blade.php
<!DOCTYPE html>
<head>
    ...
</head>
<body>
    @yield('one')
    @yield('two')
    @yield('content')
</html>


//main.blade.php
@extends('layouts.app')

@section('one')
    // dynamic content
@endsection

@section('two')
    // dynamic content
@endsection


//other.blade.php
@extends('layouts.app')

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

1 个答案:

答案 0 :(得分:0)

回答有关如何共享组件数据的问题,您可以阅读有关刀片模板的Laravel docs

  

将其他数据传递给组件

     

有时您可能需要将其他数据传递给组件。对于   这个原因,你可以传递一个数据数组作为第二个参数   @component指令。所有数据都将提供给   组件模板作为变量:

     

@component('alert',['foo'=&gt;'bar'])       ... @endcomponent

示例:

@extends('view', ['data_1' => 1, 'data_2' => 2])

OR

@include('view', ['title'=> 'Example of include'])

关于你的刀片结构问题,我会这样做:

// layouts.app.blade.php
<!DOCTYPE html>
<head>
    ...
</head>
<body>
    @yield('one')
    @yield('two')
    @yield('content')
</html>


//main.blade.php
@extends('layouts.app')

@section('one')
    // dynamic content
@endsection

@section('two')
    // dynamic content
@endsection

@include('other.blade.php', ["data" => 'your_data'])

//other.blade.php

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

这个问题取决于您的应用程序,刀片结构可能会有很大差异,因此可能需要回答这么广泛的问题。