shishima/dynamic-view-value-render

该软件包支持根据预定义配置在视图文件中显示值。

v1.0 2024-04-15 02:29 UTC

This package is auto-updated.

Last update: 2024-09-15 04:00:27 UTC


README

Latest Version on Packagist Total Downloads

该软件包支持根据预定义配置在视图文件中显示值。您不需要直接修改blade文件,只需调整配置,该软件包将为您处理转换。

安装

您可以通过composer安装该软件包

composer require shishima/dynamic-view-value-render

用法

  1. config目录中创建一个配置文件

    例如:为home blade创建一个配置文件

    return [
        'delivery_date' => [
            'type' => [\Shishima\ConvertExport\Pipeline\DB::class],
            'value' => 'location.name'
            ]
        ];
        ...
  2. 在控制器或类似的地方,在返回视图之前,使用dynamic_render_set_data函数分配输入数据

    例如:app/Controllers/HomeController.php

    $data = [
        'estimate' => $estimate,
        'company' => $company
    ]
    
    dynamic_render_set_data(data: $data); // <-- Here
    
    return view($view, ...));

    您可以使用compact函数收集数据到数组中,然后将其传递给dynamic_render_set_data函数

    $data = compact('estimate', 'company');
    
    dynamic_render_set_data(data: $data);  // <-- Here
    
    return view($view, ...));
  3. 在blade文件中,需要在显示值的位罝使用dynamic_render_value函数根据初始配置输出值

    <div>
        <p>{{ dynamic_render_value(config('transform.delivery_date')) }}</p>
    </div>

配置

在配置文件中,有两个可配置的值:typevalue

类型

配置的参数将是一个数组。在数组中会有用于转换输出数据的类

有2个类可用

  • \Shishima\ConvertExport\Pipeline\DB::class

    该类用于从变量内部检索数据。可以通过点.符号访问多级嵌套数据

    使用值配置指定获取值的键

    例如

    'delivery_date' => [
        'type' => [\Shishima\ConvertExport\Pipeline\DB::class],
        'value' => 'location.city.name'
        ]
    ];
  • \Shishima\ConvertExport\Pipeline\Fixed::class

    该类用于打印出在value中配置的预定义值

    例如

    'delivery_date' => [
        'type' => [\Shishima\ConvertExport\Pipeline\Fixed::class],
        'value' => 'Hello world!'
        ]
    ];

自定义转换

在实际情况下,数据转换可能涉及特殊案例。在这种情况下,为了处理这些案例,我们可以创建一个专门的处理类,并将其传递给类型以供软件包自动处理

由于type是一个数组,可以在此处传递多个处理类。数据将按从左到右的顺序进行处理

此类的输出数据将是下一个类的输入数据

例如:创建UpperCase类

namespace App\Transform;

use Illuminate\Support\Arr;
use Shishima\ConvertExport\Pipeline\ConvertExportBase;

class UpperCase extends ConvertExportBase
{
    public function __invoke($payload) {
        $value = Arr::get($payload, 'value', '');
        $dataInput = Arr::get($payload, 'dataInput');
        $config = Arr::get($payload, 'config');

        // transform value
        return strtoupper($value);
    }
}

重要!如果此类仅执行单个任务,则必须使用__invoke方法

自定义类必须扩展ConvertExportBase

参数$payload是一个包含3个值的数组

  • value:先前处理步骤的输入数据
  • dataInput:使用dynamic_render_set_data函数分配的所有数据
  • config:通过dynamic_render_value函数传递的配置

创建自定义类后,在配置文件中配置此类

'delivery_date' => [
    'type' => [
        \Shishima\ConvertExport\Pipeline\Fixed::class,
        \App\Transform\UpperCase::class,
    ],
    'value' => 'Hello world!'
    ]
];

自定义类包含多个处理方法

该软件包还支持在一个类中编写多个处理函数

为此,方法必须以convert前缀开头

例如

namespace App\Transform;

use Illuminate\Support\Arr;
use Shishima\ConvertExport\Pipeline\ConvertExportBase;

class Transform extends ConvertExportBase
{
    public function convertUpper($payload) {
        // ...
    }
    
    public function convertLower($payload) {
        // ...
    }
}

要在配置文件中使用这些函数,它们将在类型下配置。不需要convert前缀

'delivery_date' => [
    'type' => [
        '\App\Transform\Transform:Upper,Lower',
    ],
    'value' => ''
    ]
];

用于DB::classFixed::class检索数据

如果不使用上述两个类,可以留空

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息

贡献

请参阅CONTRIBUTING以获取详细信息

安全漏洞

请查看我们的安全策略,了解如何报告安全漏洞

致谢

许可协议

MIT 许可协议 (MIT)。请参阅许可文件以获取更多信息