Laravel-使用Rest API JSON的原始查询


Laravel - Raw query using Rest API JSON

我对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:

  1. 在制作API时使用post调用,为什么要向用户显示需要哪些参数才能得到响应。

  2. 您在Laravel中使用Raw查询,该框架提供了编写查询的有力方法,请坚持使用较新的方法。

  3. 如果您正在构建API,则不必使用资源,除非您希望API同时具有(插入、更新、删除、详细信息和列表功能)

根据您的问题:

问:如何传递参数
A:由于这是一个get请求,您只需要必须将参数连接到URL。

Q:移动应用程序应该发送GET谓词,而我必须制作在我的控制器中显示方法
A:这取决于您的路线如果您编写Route::get('list','ABController@list');然后,将调用list函数。根据您问题中定义的路由,将调用show函数。

Q:我必须验证路线中的参数,而不是在方法开始时使用中间件,对吧
A:最好使用中间件进行验证。在拉拉威尔有一个另一个名为Request的概念,它将监视您的参数和根据需要应用验证。