mirror of
https://github.com/flextype/flextype.git
synced 2025-08-08 06:06:45 +02:00
feat(fields): Add new field registry.get
for Registry API #494
This commit is contained in:
31
src/flextype/Foundation/Entries/Fields/RegistryField.php
Normal file
31
src/flextype/Foundation/Entries/Fields/RegistryField.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* Flextype (https://flextype.org)
|
||||
* Founded by Sergey Romanenko and maintained by Flextype Community.
|
||||
*/
|
||||
|
||||
if (flextype('registry')->get('flextype.settings.entries.fields.registry.get.enabled')) {
|
||||
flextype('emitter')->addListener('onEntriesFetchSingleHasResult', static function (): void {
|
||||
if (flextype('entries')->hasStorage('fetch.data.registry.get')) {
|
||||
// Get fetch.
|
||||
$original = flextype('entries')->getStorage('fetch');
|
||||
|
||||
$data = [];
|
||||
|
||||
// Modify fetch.
|
||||
foreach (flextype('entries')->getStorage('fetch.data.registry.get') as $field => $body) {
|
||||
$data = arrays($data)->merge(arrays($data)->set($field, flextype('registry')->get($body['key'],
|
||||
isset($body['default']) ?
|
||||
$body['default'] :
|
||||
[]))->toArray())->toArray();
|
||||
|
||||
}
|
||||
|
||||
// Save fetch.
|
||||
flextype('entries')->setStorage('fetch.data', arrays($original['data'])->merge($data)->toArray());
|
||||
}
|
||||
});
|
||||
}
|
@@ -59,6 +59,9 @@ errors:
|
||||
entries:
|
||||
extension: md
|
||||
fields:
|
||||
registry:
|
||||
get:
|
||||
enabled: true
|
||||
entries:
|
||||
fetchCollection:
|
||||
enabled: true
|
||||
|
32
tests/Foundation/Entries/Fields/RegistryFieldTest.php
Normal file
32
tests/Foundation/Entries/Fields/RegistryFieldTest.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Flextype\Component\Filesystem\Filesystem;
|
||||
|
||||
beforeEach(function() {
|
||||
filesystem()->directory(PATH['project'] . '/entries')->create();
|
||||
});
|
||||
|
||||
afterEach(function (): void {
|
||||
filesystem()->directory(PATH['project'] . '/entries')->delete();
|
||||
});
|
||||
|
||||
test('test registry field', function () {
|
||||
flextype('entries')->create('registry-root', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/registry-root/entry.md')->get()));
|
||||
flextype('entries')->create('registry-root/level-1', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/registry-root/level-1/entry.md')->get()));
|
||||
flextype('entries')->create('registry-root/level-1/level-2', flextype('frontmatter')->decode(filesystem()->file(ROOT_DIR . '/tests/Foundation/Entries/Fields/fixtures/entries/registry-root/level-1/level-2/entry.md')->get()));
|
||||
|
||||
$data = flextype('entries')->fetchSingle('registry-root');
|
||||
|
||||
print_r($data);
|
||||
print_r($data->toJson());
|
||||
|
||||
$this->assertEquals('Flextype', $data['flextype']);
|
||||
$this->assertEquals('Sergey Romanenko', $data['author']['name']);
|
||||
$this->assertEquals('MIT', $data['license']);
|
||||
$this->assertEquals('Flextype', $data['level1']['flextype']);
|
||||
$this->assertEquals('Sergey Romanenko', $data['level1']['author']['name']);
|
||||
$this->assertEquals('MIT', $data['level1']['license']);
|
||||
$this->assertEquals('Flextype', $data['level1']['level2']['flextype']);
|
||||
$this->assertEquals('Sergey Romanenko', $data['level1']['level2']['author']['name']);
|
||||
$this->assertEquals('MIT', $data['level1']['level2']['license']);
|
||||
});
|
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: Root
|
||||
registry:
|
||||
get:
|
||||
flextype:
|
||||
key: flextype.manifest.name
|
||||
author.name:
|
||||
key: flextype.manifest.author.name
|
||||
license:
|
||||
key: flextype.manifest.license
|
||||
entries:
|
||||
fetchSingle:
|
||||
level1:
|
||||
id: registry-root/level-1
|
||||
result: toArray
|
||||
---
|
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: Level 1
|
||||
entries:
|
||||
fetchSingle:
|
||||
level2:
|
||||
id: registry-root/level-1/level-2
|
||||
result: toArray
|
||||
registry:
|
||||
get:
|
||||
flextype:
|
||||
key: flextype.manifest.name
|
||||
author.name:
|
||||
key: flextype.manifest.author.name
|
||||
license:
|
||||
key: flextype.manifest.license
|
||||
---
|
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Level 2
|
||||
registry:
|
||||
get:
|
||||
flextype:
|
||||
key: flextype.manifest.name
|
||||
author.name:
|
||||
key: flextype.manifest.author.name
|
||||
license:
|
||||
key: flextype.manifest.license
|
||||
---
|
Reference in New Issue
Block a user