Laravel部分没有出现

时间:2012-12-28 14:24:39

标签: php laravel laravel-3

我会按照一些关于Laravel 3的教程,知道,我有一个问题,一个:

@section('post_navigation')
@if(Auth::check())
    @include('plugins.loggedin_postnav')
@endif
@endsection

为什么这部分没有出现?

我尝试删除部分中的所有内容,例如;

@section('post_navigation')
    <h1>Test</h1>
@endsection

但是不起作用。

完整的代码是:

<div class="navbar navbar-inverse navbar-fixed-top">
    <div class="navbar-inner">
        <div class="container">
            {{ HTML::link('/', 'Instapics', array('class' => 'brand')); }}

            <div class="nav-collapse">
                <ul class="nav">
                    @section('navigation')
                        <li class="active">{{ HTML::link('/', 'Home') }}</li>
                    @yield_section
                </ul>
            </div>

            @section('post_navigation')
            @if(Auth::check())
                @include('plugins.loggedin_postnav')
            @endif
            @endsection

        </div>
    </div>
</div>


[编辑]
我将@endsection更改为@yield_section,然后工作,但是,我仍然不明白,例如(在User_Controller索引视图中):

@section('post_navigation')
    @parent
@endsection

为什么不出现包含?

为什么我需要将 endsection 更改为 yield_section

2 个答案:

答案 0 :(得分:9)

使用@section时,您可以定义一个类似定义变量的部分。然后,您可以通过@yield('sectionname')(或使用我在第二段中指定的其他方式)在您想要的地方使用它。例如,你可以看一下:

@section('scripts')
    <script src="jquery.js"></script>
@endsection

<head>
    @yield('scripts')
</head>

@section / @endsection和@section / @yield_section不一样。 @section / @yield_section定义了一个区域,而不是一个区域。换句话说,它调用一个变量。实际上它与yield('sectionname')比@section / @endsection更相似。它具有默认值作为与收益率的主要差异。

您可以定义一个具有默认值的区域,然后您可以通过定义一个区域来更改它。这个逻辑主要用于创建和使用布局。例如,让下面的页面成为我们的主要(main.blade.php)布局。

<html>
    <head>
        <title>
        @section('title')
        Default Title Maybe Sitename.com
        @yield_section
        </title>
        @include('scripts')
    </head>
    <body>
        <div id="content">
        @section('content')
            Default content
        @yield_section
        </div>
        <div id="sidebar">
        @section('sidebar')
            <ul id="menu">
                <li><a href="#">Menu item 1</a></li>
                <li><a href="#">Menu item 2</a></li>
                <li><a href="#">Menu item 3</a></li>
                <li><a href="#">Menu item 4</a></li>
            </ul>
        @yield_section
    </body>
</html>

通常不直接使用布局。另一个页面在页面中创建并指定其布局,如@layout('main')。然后,定义部分并且laravel模板系统更改定义的部分。让这个页面成为我们的帖子(post.blade.php)页面:

@layout('main')

@section('title')
$post->title - @parent
@end_section

@section('content')
$post->content
@end_section

当我们返回视图View::make('profile');时,如您所见,布局逻辑将起作用,main.blade.php中的部分将根据我们在此页面中定义的内容进行更改。所以,输出将是:

<html>
    <head>
        <title>
        Post title - Default Title Maybe Sitename.com
        </title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    </head>
    <body>
        <div id="content">
            Post content
        </div>
        <div id="sidebar">
            <ul id="menu">
                <li><a href="#">Menu item 1</a></li>
                <li><a href="#">Menu item 2</a></li>
                <li><a href="#">Menu item 3</a></li>
                <li><a href="#">Menu item 4</a></li>
            </ul>
    </body>
</html>

顺便说一句,@parent返回部分区域中的默认值,@include与php中包含的逻辑相同。

度过愉快的一天。

答案 1 :(得分:1)

好像你可能找到了答案。但看起来@endsection已经被L4中的@stop取代了。尝试这样的事情:

@section('scripts')
    <script src="jquery.js"></script>
@stop