2014-11-05 5 views
1

Я сделал запрос (head.blade.php) и попытался загрузить его в HomeController __construct с функцией View::make(). Однако функция работает, но не с переменными.Laravel Views (создатель & make)

Например, вот функция, с 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

В общем, ООП, вы не возвращаете никакого значения из конструктора. Неявное возвращаемое значение конструктора составляет объект. Помните, что конструктор вызывается всякий раз, когда новый объект сделан:

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

Инстанцирование контроллера Laravel происходит перед к диспетчерскому маршрута, поэтому возвращение View внутри конструктора является логически некорректным. См. Также this answer.

Я не уверен, почему вы пытаетесь это сделать, но я считаю, что это может быть связано с тем, что вы пытаетесь подключить представление «заголовка» ко всем представлениям, возвращаемым этим конкретным контроллером. Если да, это не так, как вы делаете это в Ларавеле. Для достижения этой цели, сделать вид макета, что ваши другие виды продлят:

<!-- 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')) как $ style) {{HTML :: style ($ style)}} @endforeach Но, я не знаю Не знаете, насколько это безопасно ...:/ – user2132802

+0

каким образом вы пытаетесь его защитить? конечный результат этого кода предположительно просто ссылается на ссылки на таблицы стилей, поэтому я не уверен, какова будет ваша забота. –

+0

Хорошо, у меня появилась идея, мне нужно снова подумать об этом. Спасибо, что помогли мне разобраться! :) – user2132802

Смежные вопросы