加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel嵌套路由模型绑定

发布时间:2020-12-14 19:48:03 所属栏目:大数据 来源:网络整理
导读:我正在使用Laravel开发一个API用于移动应用程序,并且在嵌套路由上遇到一些Route Model Binding问题. 该应用程序将具有独立的sqlite数据库,当网络可用时,它将同步客户端旅程与中央服务器.因此,应用程序中的PK不能用于访问中央服务器上的记录.每个用户都有一个
我正在使用Laravel开发一个API用于移动应用程序,并且在嵌套路由上遇到一些Route Model Binding问题.
该应用程序将具有独立的sqlite数据库,当网络可用时,它将同步客户端旅程与中央服务器.因此,应用程序中的PK不能用于访问中央服务器上的记录.每个用户都有一个唯一的用户名,该用户名将存储在具有以下列的表中的中央服务器上:
  • user_id
  • username

然后,旅程表将包含以下列:

  • journey_id
  • user_id
  • user_journey_id

其中user_journey_id将是客户端设备上旅程记录的PK.
这个想法是客户可以通过以下方式访问api:
http://example.com/api/client/UNIQUE_USERNAME/journey/1234
从中央服务器检索旅程.

我有以下资源设置:

Route::resource('client','ClientController');
Route::resource('client.journey','JourneyController');

并为客户端成功设置了路由模型绑定,如下所示:

$router->bind('client',function($value,$route) {
    return AppClient::where('username','=',$value)->firstOrFail();
});

我在设置嵌套模型绑定时遇到了一些麻烦,因为我需要将客户端用户名与user_journey_id结合使用来检索正确的旅程.有没有办法用路由模型绑定来做到这一点?
或者这应该在控制器中完成,例如:

public function show(Client $client,$user_journey_id)
{
   ... // have logic here to get the journey.

这就是我目前的做法,但路线模型绑定肯定会使它更容易一些.

在Laravel中,将多个URL参数绑定到模型当然是可能的,嵌套路由模型绑定也是如此.

需要注意的是,您需要为这些特定路径单独指定路由,而不是像您在示例中使用的那样使用Laravel的资源控制器.

要注册具有多个模型绑定的路由,您需要执行以下操作:

路线定义:

Route::get('/api/client/{user}/journey/{journey}',[
  'as' => 'client.journey','uses' => 'JourneyController@getJourney'
]);

绑定定义:

$router->bind('user',$value)->firstOrFail();
});

$router->bind('journey',$route) {
    return AppJourney::where('user_journey_id',$value)->firstOrFail();
});

然后,您将发现两个模型都已解析并注入到控制器类中的action方法:

public function show(User $user,Journey $journey)
{
     //do whatever you need to do here...

这种方法唯一真正的缺点是你必须手动定义路由而不是使用Laravel的便捷资源控制器.当然,您可以实现一些自己的逻辑,以便您更容易定义这些类型的路由.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读