Laravel 从帮助器类/函数渲染控制器布局($this->layout)

Laravel 从帮助器类/函数渲染控制器布局($this->layout),laravel,laravel-4,Laravel,Laravel 4,我正在构建一个以两种方式加载内容的服务: 通过标准http请求 通过ajax请求 我通过检查每个控制器方法中的请求来实现这一点,如下所示: public function showIndex() { if (Request::ajax()) { // return ajax version of index } $this->layout->body = View::make('index'); } public static func

我正在构建一个以两种方式加载内容的服务:

通过标准http请求 通过ajax请求 我通过检查每个控制器方法中的请求来实现这一点,如下所示:

public function showIndex() {
    if (Request::ajax())
    {
        // return ajax version of index
    }
   $this->layout->body = View::make('index');
}
public static function load($route, $data)
{
    if (Request::ajax())
    {
    // return ajax version of index
    }
    $this->layout->body = View::make($route)->with($data);
}
问题是我必须在每个控制器方法中都这样做,这意味着大量重复的代码

所以,我想在某个地方创建一个函数来处理所有这些。我假设它看起来像这样:

public function showIndex() {
    if (Request::ajax())
    {
        // return ajax version of index
    }
   $this->layout->body = View::make('index');
}
public static function load($route, $data)
{
    if (Request::ajax())
    {
    // return ajax version of index
    }
    $this->layout->body = View::make($route)->with($data);
}
然后使用

Class::load('index', $data);
加载内容


但是我应该把这门课放在哪里呢?我需要访问$this,这样我才能渲染视图。

您不能只使用自己的控制器吗

您可以创建BaseController并从中扩展所有控制器:

<?php

class BaseController extends Controller {

    public function render($view, array $data = []) 
    {
        $this->layout->body = View::make($view)->with($data);
    }

}

class PostController extends BaseController {

    public function showIndex() 
    {
        if (Request::ajax())
        {
            // return ajax version of index
        }

        $this->render('index');
    }
}

我现在觉得自己很愚蠢:非常感谢!这正是我想要的。