如何在Laravel设置布局


How to setup layouts in Laravel?

以我尝试创建布局为例。我的基本控制器看起来像这样:

class BaseController extends Controller {
    protected $layout = 'layouts.default';
}

然后我通过用户控制器扩展它,就像这样:

namespace Site;
use View;
class UserController extends 'BaseController {
    
    public function index()
    {
        $this->layout->content = View::make('site/user/index');
        // return View::make('site/user/index');
    }
}

但最后我得到以下错误Attempt to assign property of non-objectvar_dump表示$this->layout是字符串,而不是对象。

基本上我只想做return View::make('site/user/index');

我喜欢这样做布局。

首先-我不设置protected $layout = 'layouts.default';在控制器-我只是离开它。

第二,我设置一个模板,像这样:

app/views/布局/master.blade.php

<h1>This is my master template</h1>
@yield('content')
<h5>This is my footer</h5>

然后在我的各种视图

app/views/user/index.blade.php

@extends('layouts.master')
@section('content')
    This is the user section
@stop

这样布局模板是在视图中定义的,而不是在控制器中,这是我认为它应该在的地方(控制器不应该知道/关心你的视图使用什么模板)

假设你所有的刀片都没问题,你坚持使用控制器布局,因为Laravel允许它作为一个选项,添加这个片段到你的BaseController来修复:

protected function setupLayout()
{
    if ( ! is_null($this->layout))
    {
        $this->layout = View::make($this->layout);
    }
}

如果你使用的是Laravel 5,你可以这样做(我不确定这是否是最好的方法)

return view("layout/here", [
    "content" => view("dynamic/content/here")
]);

那么在你的视图中你可以这样做

 <?php echo $content; ?>

当然,如果你不使用刀片。