2015-11-02 115 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