我正在构建一种以两种方式加载内容的服务:
我通过检查每个控制器方法中的请求来执行此操作,如下所示:
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所以我可以渲染视图。
答案 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);
}
}