2013-04-03 102 views
4

我正在尋找最有效的方式來處理這兩個AJAX請求作爲同步請求使用正常的形式。據我所知,有兩種方法可以處理例如新的訂單發佈請求:Laravel Restfull控制器和路由AJAX /同步請求

選項1:AJAX檢查控制器(爲簡單起見,驗證並省略掉)。

//Check if we are handling an ajax call. If it is an ajax call: return response 
//If it's a sync request redirect back to the overview 
if (Request::ajax()) { 
    return json_encode($order); 
} elseif ($order) { 
    return Redirect::to('orders/overview'); 
} else { 
    return Redirect::to('orders/new')->with_input()->with_errors($validation); 
} 

在上述情況下,我必須在每個控制器中執行此檢查。第二種情況解決了這個問題,但它看起來對我來說太過矯枉過正。

選項2:讓路由器處理請求檢查並根據請求分配控制器。

//Assign a special restful AJAX controller to handle ajax request send by (for example) Backbone. The AJAX controllers always show JSON and the normal controllers always redirect like in the old days. 
if (Request::ajax()) { 
    Route::post('orders', '[email protected]'); 
    Route::put('orders/(:any)', '[email protected]'); 
    Route::delete('orders/(:any)', '[email protected]'); 
} else { 
    Route::post('orders', '[email protected]'); 
    Route::put('orders/(:any)', '[email protected]'); 
    Route::delete('orders/(:any)', '[email protected]'); 
} 

第二個選擇似乎在路由方面的清潔劑給我,但它不是工作量(處理模型的相互作用等)的條款。

溶液(思想家)

思想家的答案是當場上解決了這個問題對我來說。繼承人擴展控制器類的更多細節:

  1. 在應用程序/庫中創建一個controller.php文件。
  2. 從思考者的答案複製控制器擴展代碼。
  3. 轉到應用/配置/ application.php和註釋此行: 「控制器」 =>「Laravel \路由\控制器」,

回答

6

solution了遺留在Laravel論壇涉及的擴展核心控制器類來管理基於REST的系統的ajax和非ajax請求。您可以在控制器中添加一些功能(前綴爲'ajax_'),而不是檢查您的路線並根據請求傳輸進行切換。因此,舉例來說,您的控制器將有功能

public function get_orders() { will return results of non-ajax GET request} 
public function ajax_get_orders() { will return results of ajax GET request } 
public function post_orders() {will return results of non-ajax POST request } 
public function ajax_post_orders() { will return results of ajax POST request } 

您可以找到粘貼here

爲了延長你必須改變別名「控制器核心控制器類'application/config/application.php中的類,然後將控制器類中的$ajaxful屬性設置爲true(並且如果需要restuful ajax控制器,則還需要$restful)。

+0

非常有趣 – BenjaminRH

+0

這是爲我做的。我在擴展控制器方面做了一些額外的研究。原來是小菜一碟。 Laravel讓我驚歎不已。 –