ceive/data-autocomplete

数据自动完成

dev-master 2018-03-17 11:12 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:27:46 UTC


README

创建一个面向系统辅助自动完成的组件

其核心在于各种自动完成,它们以属性值的类型表示属性。

自动完成有以下几种:

  • 简单自动完成 - 不具有与类或主题绑定,它反映属性的简单上下文,不能通过类或主题名称引用
  • 类自动完成 - 可以通过链接获取属性列表,这种链接可以出现在任何自动完成中作为类型(属性值)

自动完成 首先是一个用于表示 数据结构掩码,这是自动完成试图表示的。

自动完成 首先描述了一个 数据结构 掩码,不考虑这个结构在特定条件下可以组成更大的结构,因此存在 嵌套自动完成 的概念。

嵌套自动完成 装饰简单自动完成,完全复制其接口,但这种装饰器的任务是拦截自动完成的请求路径,如果请求的嵌套级别与我们嵌套自动完成的设置匹配,则将装饰的自动完成的属性与其自己的属性合并。这样可以在不同的嵌套层次和属性上下文中重新定义相同的自动完成。

自动完成中的类型规范

  • 任何标量 [integer, string, float, null, boolean]
  • 对象,通常不直接指定,而是通过链接指定

除了技术上的好处外,自动完成还可以指示本地化的名称和描述,以提供尽可能方便的用户界面支持

此外,自动完成包还有一个类似的包 Data Structure Interface,与自动完成不同,它具有类型控制(验证结构)和定义类似于 TypeScript 中的复杂提示类型的能力。

namespace Ceive\Data\Autocomplete;

$manager = new Manager();


$manager->register(new AutocompleteClass('User',[
    'username'      => 'string',
    'password'      => 'string',
    'login_counts'  => 'int',
    'profile'       => '<User\Profile>'
]));

$manager->register(new AutocompleteClass('User\Profile',[
    'first_name'        => 'string',
    'last_name'         => 'string',
    'second_name'       => 'string',
    'user'              => '<User>'
]));

$manager->register($autocomplete = new Autocomplete([
    'user' => '<User>',
    'value' => 'mixed',
]));


$user = $manager->getByClassname('User');

$entries = $autocomplete->entries();

$this->assertEquals([
    'user' => '<User>',
    'value' => 'mixed',
],$autocomplete->entries());


$this->assertEquals([
    'user' => '<User>',
],$autocomplete->entriesLink());

// Language Labeled
//$autocomplete->getTitle($entry);
//$autocomplete->getDescription($entry);
//$autocomplete->getType($entry);

// AbsolutePath
//$autocomplete->getAbsolutePath($entry_key);


$label = [
    'lang'          => null,
    'key'           => 'user',
    'description'   => null,

    'cases' => [[
        'lang'          => 'ru_RU',
        'title'         => 'пользователь',
        'description'   => 'описание'
    ]]
];

$label = [
    'lang'          => null,
    'key'           => 'current_user',
    'description'   => null,

    'cases' => [[
        'lang'          => 'ru_RU',
        'title'         => 'текущий пользователь',
        'description'   => 'пользователь, который в момент выполнения проводит авторизованное действие'
    ]]
];