我对Laravel很陌生,我想知道我是否以正确的方式执行下面的API。
我有一个移动应用程序,它会请求在一个位置附近有餐厅,并发送带有参数(lng,lat,rad)的URL:
localhost/restaurant/@59.931412,59.931342,15
我暂时想出了这个路线:
Route::get('restaurants/@{latitude},{longitude},{radius}', 'RestaurantsController@show'})
->where(['latitude' => '[0-9]+', 'longitude' => '[0-9]+', 'radius' => '[0-9]+']);
但我看到,如果我想让它成为REST,我应该使用:
Route::resource('restaurants', 'RestaurantsController');
我不明白的是:
- 如何传递参数
- 移动应用程序应该发送GET谓词,而我必须制作在我的控制器中显示方法
- 我必须使用中间件是methode的开端,对吧
额外的好处:我的查询写得好吗,安全吗?
public function show($latitude, $longitude, $radius)
{
//Middleware to control parameters later
$results = DB::select(
'SELECT * ( 3959 * acos( cos( radians(:latitude) ) *
cos( radians( lat ) ) * cos( radians( lng ) - radians(:longitude) ) +
sin( radians(:latitude) ) * sin( radians( lat ) ) ) ) AS distance FROM events HAVING
distance < :radius ORDER BY distance LIMIT 0 , 20',
["latitude" => $latitude, "longitude" => $longitude, "radius" => $radius]);
return Response::json($results);
}
编辑:我脑子里一团糟,我有很多问题,所以我想出了一个与我的问题有点不同的帖子标题,对不起。
更新1:这是我的路线
Route::get('restaurants/@{latitude},{longitude},{radius}', 'EventsController@show');
和我的请求规则(谁被注入控制器)
public function rules()
{
return [
'latitude' => 'required|digits_between:-90,90',
'longitude' => 'required|digits_between:-180,180',
'radius' => 'required|numeric',
];
}
我有一个页面"页面重定向不正确"并且在日志中我有"无效请求(意外EOF)"
我使用artisan,我的url是:http://localhost:8000/restaurants/@59.93141200,30.31992300,15
如果没有控制器中的请求,路由就会工作。。。我试着只为纬度设置"required"这样的简单规则,它仍然不想访问请求过程。
问题来自必填项(必填项:输入数据中必须存在验证中的字段。),我不知道这里有值。
指针w.r.t您的API:
-
在制作API时使用post调用,为什么要向用户显示需要哪些参数才能得到响应。
-
您在Laravel中使用Raw查询,该框架提供了编写查询的有力方法,请坚持使用较新的方法。
-
如果您正在构建API,则不必使用资源,除非您希望API同时具有(插入、更新、删除、详细信息和列表功能)
根据您的问题:
问:如何传递参数
A:由于这是一个get请求,您只需要必须将参数连接到URL。Q:移动应用程序应该发送GET谓词,而我必须制作在我的控制器中显示方法
A:这取决于您的路线如果您编写Route::get('list','ABController@list');然后,将调用list函数。根据您问题中定义的路由,将调用show函数。Q:我必须验证路线中的参数,而不是在方法开始时使用中间件,对吧
A:最好使用中间件进行验证。在拉拉威尔有一个另一个名为Request的概念,它将监视您的参数和根据需要应用验证。