Php 如何在Laravel中设置布局?

Php 如何在Laravel中设置布局?,php,laravel,controller,laravel-4,Php,Laravel,Controller,Laravel 4,我正在尝试创建布局。我的基本控制器如下所示: class BaseController extends Controller { protected $layout = 'layouts.default'; } namespace Site; use View; class UserController extends \BaseController { public function index() { $this->layout-

我正在尝试创建布局。我的基本控制器如下所示:

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');
    }
}
然后我通过用户控制器对其进行扩展,如下所示:

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');
    }
}
但最终我得到了以下错误
尝试分配非对象的属性
var_dump
显示
$this->layout
是字符串,而不是对象


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

这是我喜欢的布局方式

首先-我不设置
protected$layout='layouts.default'在控制器中-我只是将其忽略

第二,我设置了如下模板:

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');
    }
}
app/views/layouts/master.blade.php

<h1>This is my master template</h1>

@yield('content')

<h5>This is my footer</h5>
@extends('layouts.master')

@section('content')
    This is the user section
@stop

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

我更喜欢这样做布局

首先-我不设置
protected$layout='layouts.default'在控制器中-我只是将其忽略

第二,我设置了如下模板:

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');
    }
}
app/views/layouts/master.blade.php

<h1>This is my master template</h1>

@yield('content')

<h5>This is my footer</h5>
@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允许将其作为一个选项,请将此代码段添加到
BaseController
,以解决此问题:

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

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

那么在你看来,你可以做到这一点

 <?php echo $content; ?>


当然,如果您不使用blade。

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

那么在你看来,你可以做到这一点

 <?php echo $content; ?>


当然,如果您没有使用blade。

是否存在/views/site/user/index.blade.php?@theshift exchange yap,
return View::make('site/user/index')
生成html,但没有布局。是否存在/views/layouts/default.blade.php?我相信当您使用
$this->layout->content
时,它将在
layouts.default
模板中设置
content
部分。您在
布局/default.blade.php
中是否有
@yield('content')
项?@user3158900 yap,就在那里。是否存在/views/site/user/index.blade.php?@TheShiftExchange yap,
return View::make('site/user/index')
生成html,但没有布局。是否存在/views/layouts/default.blade.php?我相信当您使用
$this->layout->content
时,它将在
layouts.default
模板中设置
content
部分。在
layouts/default.blade.php
中是否有
@yield('content')
项?@user3158900是的,它在那里。是的,这是真的,但我想知道为什么这个示例不起作用?是的-不确定-也许其他人可以帮助。看起来workblade布局应该更简单。是的,这是真的,但我想知道为什么这个示例不起作用?是的-不确定-也许其他人可以帮助。看起来工作刀片布局应该更简单。您的解决方案“方便”,但无法处理laravel 4中的干式原理(在控制器中仅设置一次正确的布局)。您的解决方案“方便”,但无法处理laravel 4中的干式原理(在控制器中仅设置一次正确的布局)。