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

时间:2014-03-25 22:16:48

标签: laravel laravel-4

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

  1. 通过标准http请求
  2. 通过ajax要求
  3. 我通过检查每个控制器方法中的请求来执行此操作,如下所示:

    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所以我可以渲染视图。

1 个答案:

答案 0 :(得分:0)

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

您可以创建一个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');
    }
}

你甚至可以把你的ajax渲染系统放在那里,完全整理你的控制器方法:

class BaseController extends Controller {

    public function render($view, array $data = []) 
    {
        if (Request::ajax())
        {
            return Response::json($data);
        }

        $this->layout->body = View::make($view)->with($data);
    }

}

class PostController extends BaseController {

    public function showPost($postData) 
    {
        return $this->render('post', $postData);
    }

}