【问题标题】:How to setup layouts in Laravel?如何在 Laravel 中设置布局?
【发布时间】:2014-05-19 12:58:07
【问题描述】:

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

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');

【问题讨论】:

  • /views/site/user/index.blade.php 存在吗?
  • @TheShiftExchange 是的,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 是的,它就在那里。

标签: php laravel controller laravel-4


【解决方案1】:

这是我喜欢的布局方式。

首先 - 我没有在控制器中设置 protected $layout = 'layouts.default'; - 我只是把它排除在外。

第二 - 我设置了一个这样的模板:

app/views/layouts/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

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

【讨论】:

  • 是的,这是真的,但我想知道为什么这个例子不起作用?
  • 是的-不确定-也许其他人可以提供帮助。看起来应该可以了
  • 刀片布局更容易。
【解决方案2】:

假设你所有的刀片都正常,并且你坚持使用控制器布局,因为 Laravel 允许它作为一个选项,添加这个 sn-p 到你的 BaseController 来解决这个问题:

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

【讨论】:

    【解决方案3】:

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

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

    那么在你看来你可以这样做

     <?php echo $content; ?>
    

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

    【讨论】:

    • 您的解决方案很“方便”,但无法处理 laravel 4 中的 DRY 原则(在控制器中设置一次正确的布局)。
    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2015-06-26
    • 2022-01-18
    • 2015-09-25
    相关资源
    最近更新 更多