Я пытаюсь заставить мой шаблон по умолчанию работать с 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
Вы смешиваете два разных подхода к компоновке 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')
Если вам нужен такой подход, у вас есть несколько проблем. Во-первых, вы включаете новый контент после макета. Не уверен, что преднамеренно, но сама функция @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
В приведенном выше ответе объясняется, как шаблоны выполняются в Laravel, однако для получения дополнительных преимуществ, таких как управление темами, организованными в тематический каталог с возможностью переключения между темами, а частичные и тематические ресурсы – все это похоже на нечто похожее на библиотеку шаблонов Phil Sturgeon для CI . Вы можете проверить комплект объектов для Laravel. Ссылка здесь: