我第一次使用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¶m2=2
我还尝试了几种方法来在注册资源之前添加带有通配符的Route::get('/event')
。
我想有一种相对简单的方法让资源控制器方法有多个参数,如果没有,那么如何配置HTTP请求以便missingMethod
接收一个数组?
答案 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/event
和api/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();
}
}
如果您想更加具体地了解start
和end
通配符格式,可以使用以下位置:
Route::get('event/{start}/{end}', 'EventController@index')
->where([
'start' => 'regexp-here',
'end' => 'regexp-here'
]);