我可以将自定义类转换为刀片 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,其中该集合中的所有对象只能用作 CustomClass 对象,每个可用方法和属性都有自动完成功能。是这样吗? 【参考方案1】:

这是不可能的。由于 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 中的变量吗的主要内容,如果未能解决你的问题,请参考以下文章

laravel刀片视图中的变量未定义错误

如何将此集合转换为 Laravel 5.2 中的数组

更改另一个刀片变量Laravel中的背景颜色

刀片视图中的laravel未定义变量

如何使用 toDF() 将自定义 Java 类对象的 RDD 转换为 DataFrame?

从 Laravel 中的控制器返回刀片组件