Laravel 集合/模型的类型提示闭包
Posted
技术标签:
【中文标题】Laravel 集合/模型的类型提示闭包【英文标题】:Type hinting closures for Laravel collections/models 【发布时间】:2021-06-21 02:23:24 【问题描述】:我一直在研究提示我的 php 代码以符合 PSR 指导的类型,但对于将模型的实例传递给函数方面该怎么做有点困惑。请参阅下面的随机示例...
public function interactWithOrder($order, $basket)
return;
对于上面的代码,$order 将是从模型中提取的单个订单的数据集合,而购物篮是一个数组。输入提示的正确方法是什么?我的建议如下...
public function interactWithOrder(mixed $order, array $basket)
return;
任何帮助将不胜感激:)
【问题讨论】:
【参考方案1】:在将模型实例传递给函数方面该怎么做
$order 将是从模型中提取的单个订单的数据集合
这取决于它是哪一个。
$order
是 Order
模型吗? ($order = Order::where(...)->first();
)
是Collection
的Order
模型吗? ($order = Order::where(...)->get();
)
如果$order
始终是Order
模型,则只需输入提示即可。
public function interactWithOrder(\App\Models\Order $order, array $basket)
\Illuminate\Database\Eloquent\Model $order
也应该可以工作。
如果$order
始终是Order
Collection
,(即使是单个订单),那么只需输入提示即可。
public function interactWithOrder(Collection $order, array $basket)
Collection
可以是Illuminate\Database\Eloquent\Collection
(特定)或Illuminate\Support\Collection
(两者都可以使用,因为Eloquent\Collection
是从它扩展而来的)
您打算如何使用该功能?
【讨论】:
这正是我需要的,谢谢!当我尝试传递 Auth::user() 的实例并在更近距离使用 (User $user) 时,它会引发错误 - 预期 \App\Models\User,得到 \Illuminate\Contracts\Auth\Authenticatable 是有一种方法可以解决这个问题,只需使用模型实例,或者最好将其保留为 ($user) TIA :) 很奇怪。它适用于我。dump(get_class(Auth::user()))
是否返回 'App\Models\User'
?
是的,它可能只是我的 IDE 显示的视觉效果。那么probs会好起来的!感谢您的帮助
也许您的 IDE 正在读取 Auth::user()
函数的返回类型,即 \Illuminate\Contracts\Auth\Authenticatable|null
。应该没问题,因为Authenticatable
是默认App\Models\User
model实现的接口。以上是关于Laravel 集合/模型的类型提示闭包的主要内容,如果未能解决你的问题,请参考以下文章
Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Compose
Larave使用composer安装无反应,提示“Changed current directory to C:/Users/Administrator/AppData/Roaming/Compose