2014-11-05 70 views
1

我提出了一個叫做(head.blade.php)的視圖,並嘗試使用View::make()函數將其加載到HomeController __construct函數中。但是,該功能起作用,但不適用於變量。Laravel Views(創建者&品牌)

例如,這裏的功能,具有View::make()

public function __construct() { 

    $this->asset = new Asset; 

    $assets = array('core'); 
       $css = $this->asset->generate($assets); 

    return View::make('includes.head')->with('styles', $css); 
} 

如果我嘗試使用$款式鑑於變量,它給我的錯誤:(未定義變量$樣式...-)

但是,在Laravel文檔挖我發現這個方法:

public function __construct() { 

     $this->asset = new Asset; 

     $assets = array('core'); 

     $css = $this->asset->generate($assets); 

     View::creator('includes.head', function($view) use ($css) { 
      $view->with('styles', $css); 
     }); 
    } 

而且View::creator工作的方法。

我的問題是,如何以及爲什麼View::make()不能在__construct中工作?

PS。我使用@include方法在另一個視圖中調用視圖。

回答

0

在一般的OOP中,您不會從構造函數返回任何值。構造函數的隱式返回值是對象。請記住,每當一個新的對象由調用構造函數:

$myObject = new MyObject(); // <-- I just called the MyObject constructor 

一個Laravel控制器的實例化發生之前到路由的調度,所以返回查看裏面的構造是邏輯上不正確。另請參閱this answer

我不知道你爲什麼要這樣做,但我相信這可能是因爲你試圖給這個特定的控制器返回的所有視圖附加'header'視圖。如果是這樣,這不是你在Laravel做這件事的方式。爲了實現這個目標,做一個佈局視圖,您的其他意見將延長:

<!-- app/views/layout/master.blade.php --> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title></title> 
    </head> 
    <body> 

    <article> 
    @include('layout.header') 

    @yield('content') 

    @include('layout.footer') 
    </article> 
    </body> 
</html> 

<!-- app/views/layout/header.blade.php --> 
<header> 
    A Header 
</header> 

<!-- app/views/layout/footer.blade.php --> 
<footer> 
    A Footer 
</footer> 

<!-- app/views/some-view.blade.php --> 
@extends('layout.master') 

@section('content') 
View Content 
@stop 

採用這種設置,some-view.blade.php將同時擁有一個頁眉和頁腳夾視圖的主要內容。

+0

謝謝您的回覆。 :) 是的,這是我想嘗試的一件事,而且我想從配置文件加載我的資產,我知道有一種方法與靜態功能。例如,我可以調用: @foreach(Asset :: generate(array('core'))as $ style) {{HTML :: style($ style)}} @endforeach 但是,不知道這是多麼安全......:/ – user2132802 2014-11-05 16:51:35

+0

你用什麼方式來保護它?該代碼的最終結果應該是鏈接對樣式表的引用,所以我不太確定你的擔心是什麼。 – 2014-11-05 16:53:25

+0

好的,我明白了,我需要再考慮一遍。謝謝你幫我把事情搞定! :) – user2132802 2014-11-05 17:02:51