刀片将值从视图传递到master,然后将其传递给header.blade

时间:2015-11-02 14:09:11

标签: laravel laravel-5 blade

我有一种情况,我有一个视图文件users.blade.php扩展master。并且master包含另一个名为header.blade.php的文件,我想将一些数据从users.blade传递给header.blade。

以下是文件的简化版本

/******Shared/master.blade.php ********/
<html>
    <head>
        <title>@yield('title')</title>
        @include('shared.header')
    </head>
    <body >

        @yield('content')

    </body>
</html>

这是master.blade.php

/******Shared/header.blade.php ********/
<link rel="stylesheet" href="links to bootstrap" />
@yield('pagecss')
<link rel="stylesheet" href="links to other files" />

这是头文件

/********** Users.blade.php ***********/
@extends('shared.master')
@section('title', 'Dashboard')

@section('pagecss')
    <link rel="stylesheet" href="links to css file" />
@endsection

<?php $pagecss = <<<CSS_FILES
<link rel="stylesheet" href="links to page css" />
CSS_FILES;
?>

/*********** Shared/header.blade.php **********/
@if(isset($pagecss))
    {{-- */ echo $pagecss;/* --}}
@endif

@yield(&#39; pagecss&#39;)并不在header.blade中工作,但它在master.blade中有效。现在我无法将其粘贴到master中.blade因为有些文件会覆盖其他文件,所以它必须按特定的顺序排列。任何想法如何使yield.blade中的产量工作?

修改 我喜欢 Bh​​arat Geleda 方法,我修改了代码以包含一些heredocs以使其更方便。但我认为它是一种黑客攻击,仍然在寻找更好的解决方案。

MediaCapture

2 个答案:

答案 0 :(得分:0)

可能的解决方案是做到这一点

<?php $pagecss = '<link rel="stylesheet" href="links to css file" />'?>
    /****** Users.blade.php *********/
    @extends('shared.master')
    @section('title', 'Dashboard')

master.blade.php将保持不变

/******Shared/master.blade.php ********/
<html>
    <head>
        <title>@yield('title')</title>
        @include('shared.header')
    </head>
    <body >

        @yield('content')

    </body>
</html>

然后在你的头文件中你可以做到这一点

/******Shared/header.blade.php ********/
<link rel="stylesheet" href="links to bootstrap" />
@if(isset($pagecss))
    {{ $pagecss }}
@endif
<link rel="stylesheet" href="links to other files" />

编辑:测试问题

main.blade.php(在你的情况下是主人)

<html>
<head>
    @include('test.header')
</head>
<body >

@yield('content')

</body>
</html>

<强> header.blade.php

<link rel="stylesheet" href="links to bootstrap" />
@yield('pagecss')
<link rel="stylesheet" href="links to other files" />

<强> users.blade.php

@extends('test.main')

@section('content')
    CONTENT
@endsection

@section('pagecss')
    <link rel="stylesheet" href="links to css file" />
@endsection

输出:

<html>
<head>
    <link rel="stylesheet" href="links to bootstrap" />
    <link rel="stylesheet" href="links to css file" />
    <link rel="stylesheet" href="links to other files" />
</head>
<body >

    CONTENT

</body>
</html>

我猜这是预期的。

答案 1 :(得分:0)

如果它在主页上工作而不是在内部视图中工作很简单,这意味着您已经使用过它,而 Blade 只会采用更高级别并解决它(包括它内容应放在@yield)内。

我想说的是,如果您的头文件中有@yield,并且您已将其用作@section('pagecss'),那么您将获得另一个视图,就像您的情况一样{ {1}}使用相同的语句Users.blade.php刀片不会占用内部刀片。

<强> 解决方案

很好但很愚蠢:

在共享标头刀片文件中创建另一个@section('pagecss'),并将其命名为二级或类似名称。即@yield

好方法:

使用@yield('pagecss-2'),该指令将附加(而不是覆盖)内容到布局

docs of laravel

中所述