2014-03-25 102 views
0

我建立這兩種方式加載內容的服務:

  1. 通過標準的HTTP請求
  2. 通過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); 
} 

然後用

Class::load('index', $data); 

加載內容。

但是我應該把這個課程放在哪裏?我需要訪問$ this,這樣我才能呈現視圖。

回答

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渲染系統出現,完全uncluttering您的控制器方法:

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

} 
+0

我覺得愚蠢現在:)非常感謝!這正是我想要的。 –