我有一个数组,我想在 foreach 循环的编辑模板中输出它。 但我收到错误无法访问字符串上字符串类型的偏移量
在刀片中我有这个:
@foreach ($post->cage as $c )
<div data-repeater-item="">
<div class="form-group">
<label class="col-sm-1 control-label">Make</label>
<label class="col-sm-1 control-label">Comment</label>
<div class="col-sm-2">
<input type="text" name="cage[1][comment]" value="{{ $c['comment'] }}" class="form-control">
</div>
</div>
</div>
@endforeach
控制器非常基础
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id): Response
{
return response()->view('post.edit', [
'post' => Posts::findOrFail($id),
]);
}
vardump 给出了这个
array(3) {
["level"]=> string(6) "middle"
["comment"]=> string(4) "joe2"
[0]=> array(2) {
["level"]=> string(6) "middle"
["comment"]=> string(4) "joe2" }
}
知道如何让 foreach 获取值吗? 我需要在控制器中添加一些东西吗?解码什么的? 预先感谢
额外编辑。 Cage是一个可以存储数组的文本字段
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('posts', function (Blueprint $table) {
$table->text('zone')->nullable();
$table->text('cage')->nullable();
});
}
在模型文件中
protected $casts = [
'cage' => 'array'
];
edit2:将文本字段更改为 json 字段。通过数组的 foreach 循环现在工作正常。谢谢大家的帮助!
解决方案是将您的列类型更改为
json
而不是 text
:更新您的 posts.cage
迁移:
$table->text('cage')->nullable();
至:
$table->json('cage')->nullable();
或者这个(如果你想总是有一个空数组作为默认值):
$table->json('cage')->nullable()->default('[]');
此外,我还可以建议在您的表单中添加一个键:
@foreach ($post->cage as $cageKey => $cage)
<div data-repeater-item="{{$cageKey}}">
<div class="form-group">
<label class="col-sm-1 control-label">Make</label>
<label class="col-sm-1 control-label">Comment</label>
<div class="col-sm-2">
<input type="text" name="cage[{{$cageKey}}][comment]" value="{{ $cage['comment'] }}" class="form-control">
</div>
</div>
</div>
@endforeach