将数组发送到 Blade 组件(Laravel 8)

Posted

技术标签:

【中文标题】将数组发送到 Blade 组件(Laravel 8)【英文标题】:Sending arrays to Blade component (Laravel 8) 【发布时间】:2021-07-06 04:00:09 【问题描述】:

我正在尝试创建一个 x-select 组件,我可以在其中传递一组选项作为属性之一。

这里是create.blade.php

<?php $list = ['Received', 'In Process', 'Repaired', 'Completed', 'Shipped', 'Waiting on Boards', 'In Route'];?>
<x-select id="progress" class="block mt-1 w-full" name="progress" :value="old('progress')" :list="$list" />

这里是组件select.blade.php

@props(['disabled' => false])

<select  $disabled ? 'disabled' : ''  !! $attributes->merge(['class' => 'rounded-md shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!>
    @foreach ($list as $item)
        <option @if($item == $value) selected @endif> $item </option>
    @endforeach
</select>

问题是它在运行$attributes-&gt;merge() 时试图解析/打印:list。这似乎不应该是这种情况,因为根据 Laravel 8 Blade 文档,您似乎可以添加一个在运行 $attributes-&gt;merge() 时不会打印的 :attribute。见:https://laravel.com/docs/8.x/blade#default-merged-attributes

如果我将 :list 的值更改为普通字符串,它将在运行 $attributes-&gt;merge() 时打印该字符串,这与那些文档相反,并且使我无法传递数组,因为它试图修剪数组和失败并出现此错误:

trim() expects parameter 1 to be string, array given

【问题讨论】:

无关:$item 应该是 $item 在你的 &lt;option&gt; 中的刀片内 谢谢,我已经更新了我的问题。 【参考方案1】:

您可以先使用json_encode 对数组进行字符串化:

<?php $list = json_encode(['Received', 'In Process', 'Repaired', 'Completed', 'Shipped', 'Waiting on Boards', 'In Route']); ?>

然后你可以使用json_decode将其转回数组:

@foreach(json_decode($list, true) as $item)
-- your code here --
@endforeach

【讨论】:

以上是关于将数组发送到 Blade 组件(Laravel 8)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 和 Vue 在 Blade 中从组件 1 向组件 2 发送数据

在 Laravel 8 Jetstream 的 Blade 组件中绑定 Livewire 属性

如何正确地将数据从 vue 组件发布到 laravel 控制器

在 Laravel 8 Blade 中使用多维数组

将 Laravel 路由中的数组传递给 Blade 模板

使用 Laravel 8(和 Jetstream)将自定义数据传递到 login.blade.php