视图部分中的App :: make控制器方法导致nginx中的502错误

时间:2014-10-31 08:58:01

标签: laravel laravel-4

这是我的master.blade.php(网址:管理员):

@section('admin_body')
  {{ App::make('PageController')->index() }}
@show

这是我的index.blade.php:

@extends('master')
    @section('admin_body')
        <p>Hello!</p>
    @stop

如果我访问URL:admin - 我收到502错误的网关错误。当我删除 index.blade.php 的contsnts时 - 它确实有效。

1 个答案:

答案 0 :(得分:0)

这不是在布局中包含视图的正确方法。 Laravel Templates Docs举例说明了实现这一目标的两种方法。

控制器布局

您可以通过继承BaseController并设置layout属性来使用控制器布局。在您的情况下,控制器看起来像这样:

class PageController extends BaseController {

    protected $layout = 'master';

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

并将其放在要输出视图的master.blade.php中:

{{ $content }}

Blade Templating

Blade templating使用它自己的内部继承系统。通过使用部分和扩展,你在正确的轨道上,但这里是如何正确使用它。对于您的控制器,不需要扩展BaseController并定义布局,只需返回@extends布局的视图。所以像这样:

class PageController {

    public function index()
    {
        return View::make('index');
    }
}

您的视图文件index.blade.php需要@extends布局文件(除了您不需要第二个@stop指令外,您所做的就是好的,因为@extends没有关闭@stop):

@extends('master')
@section('admin_body')
    <p>Hello!</p>
@stop

您的布局文件master.blade.php需要在@yield指令中包含视图部分:

@yield('admin_body')

使用@include

作为旁注,您还可以使用@include('view_name')在另一个视图中包含视图,但最好使用上述两种方法中的任意一种来设置布局。