2014-10-25 6 views
0

Я создаю простое приложение с Laravel в первый раз. Я наблюдал и читал видео на наследование клинков в течение нескольких часов, и я не вижу, что я делаю неправильно. Код в настоящее время выглядит следующим образом:Confused by Laravel Blade templating @extends keyword

Route.php файл:

Route::get('/', function() 
{ 
    return View::make('home'); 
}); 

home.blade.php файл:

@extends('layouts.base') 

@section('body') 
    @include('body.main') 
@stop 

//other stuff 

, который расширяет файл макета:

<!doctype html> 
<html lang="en"> 

<head> 
    //head stuff 
</head> 
<body> 
    <div class="container-fluid"> 
     <div class="wrapper"> 
      @yield('body') 
     </div><!-- end wrapper --> 
    </div><!-- end container --> 
</body> 
</html> 

сейчас моя проблема в том, что у меня есть файл body (ниже), в котором я хочу получить еще один раздел урожая.

<div class="row"> 
    <div class="content col-md-12"> 
     @yield('card') 
    </div> 
</div> 

и card.blade.php выглядит следующим образом:

@extends('main') 

@section('card') 
    <div class="card"> 
     <h2>Hello</h2> 
    </div> 
@stop 

Это только самая последняя версия. Я попытался использовать разные файлы макета, поставив extends и yield во всех разных местах на основных и макетных страницах. Но ничего не работает. В настоящий момент основное содержимое отображается, но не файл карты (который я хочу, в конце концов, повторить с разными данными, полученными от красноречивых).

Я прочитал четыре или пять различных учебников по лезвиям, но ничего не работает, даже если мне кажется, что это определенно должно быть. Большинство из них не охватывают расширение и уступающее прошлому слою, с которым у меня нет проблем. Что я делаю не так?

+0

почему бы не использовать @include вместо того, получая раздел? – Miks

+0

@Miks, когда я использую include, я получаю исключение 'not found'. – eignhpants

ответ

1

Он работает таким образом, что когда вы звоните View::make, он идет оттуда вверх, используя @extends.

  1. дом
  2. layouts.base

И когда происходит 'вверх' лестница @yield включает в себя разделы. Таким образом, вы технически должны позвонить View::make('card'), что, вероятно, не имеет смысла. Вместо этого вы можете попробовать @include -в карточке шаблона.

card.blade.php

<!-- no section or extends needed --> 
<div class="card"> 
    <h2>Hello</h2> 
</div> 

body.blade.php

<div class="row"> 
    <div class="content col-md-12"> 
     @include('card') 
    </div> 
</div> 
+0

это тоже не работает. Я получаю 'view [card] не найденную ошибку. Вот почему я начал путь, который я использовал, используя 'extend'. У меня есть два файла 'card', один в подкаталоге и другой в том же каталоге, что и' main'. никто не работает. Если я попытаюсь положить другое «карточное» лезвие в каталог основных представлений, я получаю ошибку браузера 'no data received'. – eignhpants

+1

Включение представлений не относится к каталогу, в котором вы сейчас находитесь, поэтому вам всегда нужно указать полный «путь». Если card.blade.php находится в views/body /, тогда вам нужно написать '@include ('body.card')' – lukasgeiter

+0

Это исправило это.У меня неверный каталог include. – eignhpants

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