Blade Engine в Laravel - yield не работает

Я неоднократно пытался заставить работать простой шаблон лезвия. Это код:

routes.php

<?php

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

BaseController.php

<?php

class BaseController extends Controller {

    /**
     * Setup the layout used by the controller.
     *
     * @return void
     */
    protected function setupLayout()
    {
        if ( ! is_null($this->layout))
        {
            $this->layout = View::make($this->layout);
        }
    }

}

hello.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>swag</title>
</head>
<body>

    hello

    @yield('content')

</body>
</html>

content.blade.php

@extends('hello')

@section('content')

<p>content check</p>

@stop

Когда я запускаю этот код в браузере, остается только текст приветствия, который я написал в hello.blade.php, однако yield ('content') ничего не отображает, и я не могу понять, почему. Буду признателен за любую помощь, спасибо


person Slávek Parchomenko    schedule 18.03.2014    source источник


Ответы (3)


Вы создали неправильное представление. Родительский вид hello, он не знает о content. Вот почему вы написали @extends('hello'), таким образом, когда вы создаете свое content представление, оно будет знать, что оно должно расширять материал из hello.

Route::get('/', function()
{
    return View::make('content');
});
person totymedli    schedule 18.03.2014
comment
О, боже мой, мой мыслительный процесс заключался в том, что, поскольку я установил главное представление по умолчанию, он проверит, нужно ли что-нибудь добавить к нему, а затем отобразит все выходы и включения. Похоже, я ошибался, это сработало. Спасибо еще раз! - person Slávek Parchomenko; 18.03.2014

Для всех, кто борется с этим, убедитесь, что ваш php-файл шаблона имеет имя с расширением лезвия в нем, например: mytemplate.blade.php, если вы допустили ошибку, оставив .blade расширение, ваш шаблон не будет правильно проанализирован.

person thePHPHero    schedule 04.02.2016
comment
OMG, я пропустил добавить лезвие .... Спасибо - person Rishabh; 18.05.2021

Вы должны использовать

@extends('layouts.master')

вместо того

@extends('hello')

в вашем hello.blade.php файле просмотра и убедитесь, что у вас есть основной макет в вашем views/layouts каталоге, чтобы ваш hello.blad.php расширил основной макет и отобразился шаблон.

На самом деле ваш hello.blade.php файл должен быть master.blade.php, а hello.blade.php должен расширять этот главный макет, поэтому hello.blade.php должен выглядеть примерно так:

@extends('layouts.master')

@section('content')

<p>content check</p>

@stop

Файл master.blade.php:

<!DOCTYPE html>
<html>
    <head>
       <title>swag</title>
    </head>
    <body>
        @yield('content')
    </body>
</html>
person The Alpha    schedule 18.03.2014
comment
Пытался, изменил имена файлов, расширил, маршрут и т. Д., К сожалению, он все еще не работает - person Slávek Parchomenko; 18.03.2014
comment
Попробуйте правильно, вы, вероятно, сделали ошибки, в этом ответе нет ничего плохого, если вы все сделаете правильно, все будет работать. Также проверьте документацию. - person The Alpha; 18.03.2014
comment
Это очень сложное для понимания объяснение процесса, в котором вы должны заменить все hello на master и все content на hello в ваших файлах Blade, включая их имена. - person totymedli; 18.03.2014