当前位置 : 主页 > 网络编程 > PHP >

Laravel — P51:路由模型隐式绑定

来源:互联网 收集:自由互联 发布时间:2023-09-03
现在我们已经熟悉了依赖注入,我们还能用这个概念做什么呢?我们能否像模型一样将我们的模型“注入”​ ​User​ ​​到我们的路由中,然后在不实例化​ ​User​ ​模型的情况下

现在我们已经熟悉了依赖注入,我们还能用这个概念做什么呢?我们能否像模型一样将我们的模型“注入”​​User​​​到我们的路由中,然后在不实例化​​User​​模型的情况下利用模型属性?我们怎么会那样做?在使用与该用户关联的属性之前,我们不需要先“找到”特定用户吗?

信不信由你,Laravel 有一种无需显式执行以下操作即可获取用户详细信息的方法​​User::find(24);​​:

隐式绑定

我们应该明白,我们​​id​​至少需要为我们的模型提供一个,否则,它将如何从数据库表中提取我们特定资源的信息?在这个​​User​​例子中,我们不希望 Laravel 返回一个随机用户,我们想要一个特定的用户。

use App\Models\User;

Route::get('/implicit-binding/{user}', function (User $user) {
return $user;
});

如果我们访问这条路线,你应该得到这样的东西。

{
"id": 2,
"name": "Maria Nitzsche",
"email": "colt21@example.org",
"email_verified_at": "2023-02-07T18:56:39.000000Z",
"created_at": "2023-02-07T18:56:39.000000Z",
"updated_at": "2023-02-07T18:56:39.000000Z"
}

发生了什么?Laravel 隐式绑定​​{user}​​到​​$user​​. 因为我们输入了类型提示​​User $user​​,Laravel 知道我们正在注入一个​​User​​模型,所以它会自动找到我们的​​User​​特定​​id​​.

只要它们匹配,你的论点叫什么并不重要。使用隐式绑定,​​id​​当参数是类型提示时,这将是 Laravel 搜索的字段。

所以,如果你想做这样的事情(命名你的 URL 参数​​id​​),它不会工作:

use App\Models\User;

Route::get('/implicit-binding/{id}', function (User $user) {
return $user;
});

你只会得到​​[]​​ 回应。

但是如果我们想使用另一个字段怎么办,比如​​name​​?我们可以这样做,但它需要说明密钥。

更改密钥

如果我们想改为根据他们的​​name​​or查找用户​​email​​,我们必须声明那是我们要查看的列。我们该怎么做?通过在我们的路线中说明关键。

use App\Models\User;

Route::get('/implicit-binding/{user:name}', function (User $user) {
return $user;
});

我们现在可以访问如下路线:

​http://0.0.0.0/implicit-binding/Maria%20Nitzsche​

Laravel 将搜索​​users​​表并返回该资源。

{
"id": 2,
"name": "Maria Nitzsche",
"email": "colt21@example.org",
"email_verified_at": "2023-02-07T18:56:39.000000Z",
"created_at": "2023-02-07T18:56:39.000000Z",
"updated_at": "2023-02-07T18:56:39.000000Z"
}

如果您只想显示电子邮件已验证的用户怎么办?这就是显式绑定的概念,下次再讲。

【文章原创作者:阿里云代理 http://www.558idc.com/aliyun.html 网络转载请说明出处】
上一篇:Laravel — P50:路由和依赖注入
下一篇:没有了
网友评论