Подтвердить что ты не робот

Шаблоны в Ларавеле

Я пытаюсь заставить мой шаблон по умолчанию работать с Laravel. Я прихожу из системы Codeigniter и Phil Sturgeon, поэтому я пытаюсь сделать это аналогичным образом. Может ли кто-нибудь помочь мне с тем, что мне не хватает/что-то не так? Спасибо!

//default.blade.php (located in layouts/default)
<html>
    <title>{{$title}}</title>
    <body>
    {{$content}}
    </body>
</html>
//end default.blade.php

//home.blade.php (index view including header and footer partials)
@layout('layouts.default')
@include('partials.header')
//code
@include('partials.footer')
//end home

//routes.php (mapping route to home controller)
Route::controller( 'home' );
//end

//home.php (controller)
<?php
class Home_Controller extends Base_Controller {
    public $layout = 'layouts.default';
    public function action_index()
    {   
        $this->layout->title = 'title';
        $this->layout->content = View::make( 'home' );
    }
}
//end
4b9b3361

Ответ 1

Вы смешиваете два разных подхода к компоновке Laravel. Таким образом вы визуализируете представление макета, включаете домашний вид и пытаетесь снова включить макет.

Мое личное предпочтение - подход к контроллеру.

Макеты контроллеров

Контроллер и макеты могут оставаться теми же.

Примечание. В качестве ярлыка вы можете вложить содержимое вместо View:: make, которое автоматически отображает его, когда вы эхо-эхо в макете.

В home.blade.php удалите функцию @layout.

Изменить (пример):

Контроллеры/home.php

<?php
class Home_Controller extends Base_Controller {
  public $layout = 'layouts.default';
  public function action_index()
  {
    $this->layout->title = 'title';
    $this->layout->nest('content', 'home', array(
      'data' => $some_data
    ));
  }
}

Виды/макеты/default.blade.php

<html>
  <title>{{ $title }}</title>
  <body>
    {{ $content }}
  </body>
</html>

вид/home.blade.php

Частицы включены в содержание.

@include('partials.header')
{{ $data }}
@include('partials.footer')

Планы Blade

Если вам нужен этот подход, у вас есть несколько проблем. Во-первых, вы включаете новый контент после макета. Не уверен, что преднамеренно, но сама функция @layout - это просто просто @include, ограниченный тем, что находится в самом начале представления. Поэтому, если ваш макет - закрытый html, любой из них после этого будет добавлен после вашего макета html.

Ваше содержание должно использовать разделы здесь с функцией @section и @yield в вашем макете. Верхний и нижний колонтитулы могут быть включены в макет с помощью @include или если вы хотите определить его в представлении контента, а затем поместите их в поле @section, как показано ниже. Если вы определите его таким образом, если раздел не существует, ничего не получится.

Контроллеры/home.php

<?php
class Home_Controller extends Base_Controller {
  public function action_index()
  {
    return View::make('home')->with('title', 'title');
  }
}

Виды/макеты/default.blade.php

<html>
 <title>{{$title}}</title>
 <body>
  @yield('header')
  @yield('content')
  @yield('footer')
 </body>
</html>

мнения/home.blade.php

@layout('layouts.default')
@section('header')
  header here or @include it
@endsection
@section('footer')
  footer
@endsection
@section('content')
  content
@endsection

Ответ 2

В приведенном выше ответе объясняется, как шаблон делается в Laravel, однако для получения дополнительных преимуществ, таких как управление темами, организованными в тематический каталог с возможностью переключения между темами, а частичные и тематические ресурсы - это почти что-то похожее на Библиотека шаблонов Phil Sturgeon для CI. Вы можете проверить комплект объектов для Laravel. Вот ссылка:

http://raftalks.github.io/Laravel_Theme_Bundle/