avapardaz/interpreter-manager

任何实体、任何地方的解释器管理器

2.6.0 2024-03-26 10:39 UTC

This package is auto-updated.

Last update: 2024-09-26 11:37:33 UTC


README

Avapardaz 合约解释器管理器


合约解释器管理器用于处理任何可解释实体的值解释和存储。


安装

通过composer安装

使用以下命令安装包

composer require avapardaz/interpreter-manager

配置

对于任何可解释的实体或模型,执行以下操作

在可解释实体上添加Interpreable接口的包。例如

namespace app\models;

use Avapardaz\InterpreterManager;

class Contract implements Interpretable
{
    ...

然后,在可解释模板实体上添加InterpreableTemplate接口的包。例如

namespace app\models;

use Avapardaz\InterpreterManager;

class ContractTemplate implements InterpretableTemplate
{
    ...

最后,创建一个InterpreterManager类,它扩展了InterpreterManager,其中你设置默认配置和覆盖。例如

namespace app\services;

use Avapardaz\InterpreterManager;

class ContractInterpreterManager extends InterpreterManager
{

以下是一个完整的InterpreterManager方法及其类型的示例

<?php

namespace common\services;

use app\models\Contract;
use Avapardaz\InterpreterManager\Adapters\BaseAdapter;
use Avapardaz\InterpreterManager\Adapters\ModelAdapter;
use Avapardaz\InterpreterManager\InterpreterManager;

class ContractInterpreterManager extends InterpreterManager
{
    /**
     * Extraction pattern
     *
     * @var string
     */
    public string $extractionPattern = '/{(.*?)}/';

    /**
     * The interpreter default adapters
     *
     * @return array
     */
    protected function defaults(): array
    {
        return [
            'adapters' => [

                BaseAdapter::class => [
                    'variables' => [
                        [
                            'label' => 'Current date',
                            'key' => 'CURRENT_DATE',
                            'fillable' => false,
                            'defaultValue' => '' // can be anything as default or can set in when interpreting via inject
                        ],
                        // ...
                    ]
                ],

                ModelAdapter::class => [
                    'variables' => [
                        [
                            'label' => 'Contract',
                            'key' => 'CONTRACT',
                            'model' => Contract::class,
                            'attributes' => ['id', 'name'],
                            'attributeLabels' => [
                                'id' => 'ID',
                                'name' => 'Name',
                                // ...
                            ]
                        ],
                        // ...
                    ]
                ],

                // ...
            ]
        ];
    }
}

API 参考

InterpreterManager

使用此类实现的所有操作