2015-11-02 112 views
2

我有一种情况,我有一个视图文件users.blade.php扩展主。主包含另一个名为header.blade.php的文件,我想将users.blade中的一些数据传递给header.blade。刀片从视图传递值到主,然后传递给header.blade

这里是文件

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

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

这里的简化版本的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" /> 
@yield('pagecss') 
<link rel="stylesheet" href="links to other files" /> 

@yield( 'pagecss')在header.blade中不起作用,但它在master.blade中起作用。现在我不能将它粘贴到master.blade中,因为有些文件会覆盖其他文件,所以它必须按照特定的顺序。任何想法如何让header.blade中的收益工作?

编辑: 我喜欢巴拉特Geleda办法,我已经修改了代码,包括一些here文档,使之更加方便。但我认为它是一种黑客,仍然在寻找更好的解决方案。

/********** 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 
+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 

OUTPUT:

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

我想这是符合市场预期。

+0

谢谢你的回复,我编辑了我的问题,并将寻找更好的方法。我会接受你的答案,如果我找不到更好的解决方案:) –

+0

是你的编辑正是我需要的,但它不适合我,让我再试一次 –

+0

谢谢巴拉特,我只是试了一遍,现在它的工作。我不确定,如果最近有很多梦想:)但真的很感谢你花时间运行这段代码。你为我节省了很多头痛。 –

0

,如果它的工作在主页上,而不是在内部的意见,这意味着你已经使用简单,并且刀片将只需要更高水平和解决问题(包括它的内容,它应该被放置在@yield)。

我想说,如果你有你的头文件中的@yield,你已经把它作为@section('pagecss')以后你有另一种观点认为在你的情况Users.blade.php用相同的语句@section('pagecss')刀片不会走内在的一个。

解决方案

很好的方式,但愚蠢的:

创建另一个@yield共享刀片头文件中,并将它命名为二级或像这样。即@yield('pagecss-2')

好方法:

使用@parent,该指令将内容追加(而不是覆盖)到这里提到内docs of laravel