2013-12-23 42 views
-5

我首次使用laravel來創建一個API,使用AJAX從angular.js單頁面應用程序訪問。我無法弄清楚如何配置控制器和URL不止一個參數傳遞給任何的資源控制器,使用AJAX傳遞多個參數

已配置我的API組路由方法如下

Route::group(array('prefix' => 'api/v1'), function(){ 
    Route::resource('event', 'EventController');  
}); 

EventController方法都是工作作爲記錄但是,我需要發送開始日期和結束日期作爲參數來檢索我的事件。

我也放置在missingMethod($parameters = array())控制器,但從來沒有任何運氣得到它開火

我嘗試添加一個額外的參數顯示方法,function show($start, $end)但不能得到AJAX URL想通了,使其工作。 已經嘗試了各種辦法:

/myapp/api/v1/event/param1/param2 
/myapp/api/v1/event/param1,param2 
/* hoping missingMethod($parameters = array()) might get this one*/ 
/myapp/api/v1/event/[param1,param2] 

在大多數情況下,幾乎所有的嘗試得到了拋出這show缺少第二個參數異常。

我終於在使用傳統查詢字符串和在我的index()函數中測試Input::get()了。

/myapp/api/v1/event?param1=1&param2=2 

我也試了幾種方法來註冊資源無濟於事前加入Route::get('/event')使用通配符。

我想有一個相對簡單的方法來讓資源控制器方法有多個參數,如果不是如何配置HTTP請求,以便missingMethod接收數組?

回答

4

您可以添加resource上述特定路線(我假設你正在使用GET您的Ajax請求):

Route::group(array('prefix' => 'api/v1'), function(){ 
    Route::get('event/{start}/{end}', '[email protected]'); 
    Route::resource('event', 'EventController');  
}); 

在你的控制器,讓你的參數可選的,所以您可以使用相同的控制器爲兩條路線的動作,api/v1/eventapi/v1/event

<?php 

class EventController extends BaseController { 

    public function index($start = null, $end = null) 
    { 
     if (isset($start) && isset($end)) { 
      return $this->eventsRepository->byDate($start, $end); 
     } 

     return $this->eventsRepository->all(); 
    } 

} 

如果你想更具體的瞭解了startend通配符格式,Y ou可以用在哪裏:

Route::get('event/{start}/{end}', '[email protected]') 
     ->where([ 
      'start' => 'regexp-here', 
      'end' => 'regexp-here' 
      ]); 
+0

我確定可以發誓我試過這種方法,但它的工作....謝謝!我可以創建一個不是'show,index,update'等的自定義方法,然後在'Route'的'@ myMethod'中使用它嗎? – charlietfl

+0

是的,你可以用'Route :: get()'綁定所有你想要的方法。另外看看一個'Route :: controller()',可能也很有用:http://laravel.com/docs/controllers#restful-controllers –

+0

好的..謝謝。今天已經遍佈那些文檔。從字面上看,昨天剛剛從拉拉維爾開始,但已經有了你給我工作的東西。下一步將找出存儲庫,但現在我的前端有足夠的工作來處理數據流動的需要 – charlietfl

相關問題