我可以将自定义类转换为刀片 Laravel 中的变量吗
Posted
技术标签:
【中文标题】我可以将自定义类转换为刀片 Laravel 中的变量吗【英文标题】:Can I cast a custom class to a variable in blade Laravel 【发布时间】:2020-04-27 05:15:57 【问题描述】:我可以在 Laravel Blade 中做类似的事情吗:
@foreach($collection as (CustomClass) $object)
【问题讨论】:
您能否举个例子说明您所追求的以及您想将项目“投射”到的CustomClass
。
所以我调用了第三方 API 并获得了将其映射到自定义类的对象。现在我有一个这个自定义类的对象集合,我想从控制器传递给我的视图。我想在刀片中使用我的类的 get 方法来实现类型安全,并且我认为需要强制转换。
你追求的是这样的:laravel.com/docs/master/collections#method-mapinto?
@Rwd 我不认为这是他需要的,因为它不会为他提供 Blade 中的安全类型。他所关注的更像是泛型,类似于 Collection这是不可能的。由于 Blade 是一种 php 模板语言,你只能做 PHP 允许的事情……而且它不允许你对局部变量进行类型转换。
您只能键入提示函数参数和 - 在新发布的 PHP 7.4 中 - 类属性。你也可以给你的函数一个返回类型。
PHP 7+:
public function foo(string $bar): int
return strlen($bar);
PHP 7.4+:
protected int $count;
当然,我的示例是使用标量类型(字符串、整数、浮点数、布尔值)制作的,但您完全可以在此处放置自定义类。
public function logout(App\User $user)
//stuff
【讨论】:
【参考方案2】:您可以使用Collection::whereInstanceOf()
过滤掉任何不属于您所需类别的内容。
https://laravel.com/docs/5.8/collections#method-whereinstanceof
@foreach($collection->whereInstanceOf(CustomClass) as $object)
如果您想简单地出错,如果不是您的类,那么您可以比较集合的大小。但我建议在控制器中进行:
if ($collection->whereInstanceOf(CustomClass)->count() !== $collection->count())
throw Exception();
【讨论】:
【参考方案3】:您在问题中提供的信息很少,但由于您使用的是@foreach,您可以按以下方式进行类型转换,这应该可以工作:
@foreach($collection as $object)
@php($object = (object)$object)
......
@endforeach
这应该允许您使用$object->item
【讨论】:
以上是关于我可以将自定义类转换为刀片 Laravel 中的变量吗的主要内容,如果未能解决你的问题,请参考以下文章