首页 > 解决方案 > Laravel 背包,在列中显示地址(Json)

问题描述

我想显示地址 json 中的名称字段(使用 algolia),我该怎么做?

我试过这个:

$this->crud->addColumn([
     'name' => "address",
     'label' => 'Address',
     'type' => 'array',
]);

但无法工作。此外,它总是返回错误。

在预览中,我也想显示完整地址,但只得到 json 返回。

在此处输入图像描述

提前致谢

标签: phpjsonlaravellaravel-backpack

解决方案


管理使用自定义字段。

控制器:

 $this->crud->addColumn([
            'name' => 'address', //db field
            'label' => "Address", 
            'type' => 'customAddress' //name of custom created custom field
 ]);

在以下位置创建自定义字段:resources\views\vendor\backpack\crud\columns 我将其命名为“customAddress.blade.php”

自定义字段:

{{-- customAddress--}} 
<?php $object  = (object) json_decode($entry['address'], true); ?>
<span><?php echo $object->value; ?></span>

您也可以使用 foreach 显示,例如 $object->name、$object->country 等...

希望这可以帮助某人。

编辑 1 - Backpack 4.1 更新专栏

对于从 Backpack 4.0 迁移到 4.1 的每个人,您也应该更新此自定义列。

这是 Backpack v4.1 的更新代码。在 v4.1 中,列是否被转义是有区别的。

我还添加了一个检查以防 JSON 解析错误。

{{-- customAddress--}}
@php
    $value = data_get($entry, $column['name']);
    $column['escaped'] = $column['escaped'] ?? false;

    json_decode($entry['address']);
    if(json_last_error() == JSON_ERROR_NONE){
        $object  = (object) json_decode($entry['address'], true);
        $value = $object->value;
    } else{
        $value = $entry['address'];
    }
@endphp

<span>
    <span class="d-inline-flex">
        @includeWhen(!empty($column['wrapper']), 'crud::columns.inc.wrapper_start')
        @if($column['escaped'])
            {{ $value }}
        @else
            {!! $value !!}
        @endif
        @includeWhen(!empty($column['wrapper']), 'crud::columns.inc.wrapper_end')
    </span>
</span>

希望这对从 Backpack 4.0 迁移的人有所帮助。


推荐阅读