0

我今天使用的是 Laravel 4 的全新版本。

我有一个仪表板控制器

class DashboardController extends BaseController {

protected $layout = 'layouts.dashboard';

public function index()
    {
        $this->layout->content = View::make('dashboard.default');
    }

}

我有一条简单的路线

Route::get('/', 'DashboardController@index');

我在views/layouts/dashboard.blade.php 中有一个刀片布局为了从所有实际的HTML 中拯救每个人,我使用了一个模型。

<html>
<head>
  <title></title>
</head>
<body>
@yield('content')
</body>
</html>

我在 views/dashboard/ 中有一个默认刀片文件,它具有以下内容(为简单起见进行了编辑)

@section('content')
<p>This is not rocket science</p>
@stop

由于某种原因,内容在布局之前生成。

4

3 回答 3

4

我正在使用不同的方法将布局全局设置为使用自定义过滤器的路由。将以下过滤器放入 app/filters.php

Route::filter('theme', function($route, $request, $response,  $layout='layouts.default')
{
    // Redirects have no content and errors should handle their own layout.
    if ($response->getStatusCode() > 300) return;

    //get original view object
    $view = $response->getOriginalContent();

    //we will render the view nested to the layout
    $content = View::make($layout)->nest('_content',$view->getName(), $view->getData())->render();

    $response->setContent($content);
});

现在,您可以将路由分组并应用过滤器,而不是在控制器类中设置布局属性,如下所示。

Route::group(array('after' => 'theme:layouts.dashboard'), function()
{

    Route::get('/admin', 'DashboardController@getIndex');

    Route::get('/admin/dashboard', function(){ return View::make('dashboard.default'); });

});

创建视图时,请确保在所有子视图中使用@section('sectionName') 并在布局视图中使用@yield('sectionName')。

于 2013-08-05T23:47:45.197 回答
0

例如,我发现像这样进行布局更容易。我会像这样创建我的主刀片文件

<html>
    <body>
      @yield('content');
    </body>
</html

在我想在顶部使用 master 的刀片文件中,我会放

@extends('master')

然后内容像这样

@section('content')
 // content
@stop

希望这可以帮助。

于 2013-06-05T07:36:32.137 回答
0

当您使用控制器布局时,即$this->layout->...,您可以将数据作为变量而不是部分来访问。因此,要访问布局中的内容,您应该使用...

<html>
<head>
  <title></title>
</head>
<body>
  <?php echo $content; ?>
</body>
</html>

在你的部分,你不会使用@section@stop......

<p>This is not rocket science</p>
于 2013-06-05T07:54:32.973 回答