资源控制器,使用AJAX传递多个参数

时间:2013-12-23 01:03:19

标签: php laravel laravel-4

我第一次使用laravel创建一个API,使用来自angular.js单页应用程序的AJAX进行访问。我无法弄清楚如何配置控制器和URL以将多个参数传递给任何方法

为我的API组配置路由如下

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

EventController方法都按照文档记录,但是,我需要发送一个开始和结束日期作为检索我的事件的参数。

我还将missingMethod($parameters = array())放在控制器中,但从来没有运气好吗

我尝试为show方法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缺少第二个参数的异常。

我最终决定使用传统查询字符串并在Input::get()函数中测试index()

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

我还尝试了几种方法来在注册资源之前添加带有通配符的Route::get('/event')

我想有一种相对简单的方法让资源控制器方法有多个参数,如果没有,那么如何配置HTTP请求以便missingMethod接收一个数组?

1 个答案:

答案 0 :(得分:5)

您可以在resource之上添加该特定路线(我假设您正在使用GET来处理您的ajax请求):

Route::group(array('prefix' => 'api/v1'), function(){
    Route::get('event/{start}/{end}', 'EventController@index');
    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通配符格式,可以使用以下位置:

Route::get('event/{start}/{end}', 'EventController@index')
         ->where([
            'start' => 'regexp-here', 
            'end' => 'regexp-here'
           ]);