[英]Laravel - Raw query using Rest API JSON
我是Laravel的新手,我想知道我是否以正确的方式执行了Follow 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');
我并不奇怪的是:
奖励:我的查询写得好吗,是否安全?
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)”
我使用工匠,我的网址是: http:// localhost:8000 / restaurants / @ 59.93141200,30.31992300,15
在控制器中没有请求的情况下,路由有效...我尝试仅将“要求”之类的简单规则仅用于纬度,但仍然不想访问请求过程。
问题来自于必填项 (必填项: 必填项 ,必填项,必填项 ,必填项)。
指针带有您的API:
制作API时使用后期调用,为什么要向用户显示需要哪些参数才能获得响应。
您在Laravel中使用Raw查询,该框架在此框架中提供了雄辩的方式来编写查询,并坚持使用新方法。
在构建API之前,并非必须使用资源,除非直到并且除非您希望API具有(同时具有全部的“插入,更新,删除,详细信息和列表”功能)
根据您的问题:
问:如何传递参数?
答:由于这是一个get请求,因此只需将参数连接到URL。问:移动应用程序应该发送GET动词,我必须在控制器中执行“显示”方法吗?
答:如果您编写Route :: get('list','ABController @ list');这取决于您的路线,所调用的函数。 然后,将调用列表函数。 按照您在问题中定义的路线,将调用show函数。问:我不必在路由中进行参数验证,而必须在方法开始时使用中间件,对吗?
答:最好使用中间件进行验证。 在laravel中,还有另一个称为Request的概念,它将监视您的参数并根据需要应用验证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.