mirror of
https://github.com/flarum/framework.git
synced 2025-02-07 15:46:14 +08:00
Add default value to Settings extender (#2495)
This commit is contained in:
parent
7a6284c760
commit
111f615c60
|
@ -26,11 +26,12 @@ class Settings implements ExtenderInterface
|
||||||
* @param string $attributeName: The attribute name to be used in the ForumSerializer attributes array.
|
* @param string $attributeName: The attribute name to be used in the ForumSerializer attributes array.
|
||||||
* @param string $key: The key of the setting.
|
* @param string $key: The key of the setting.
|
||||||
* @param string|callable|null $callback: Optional callback to modify the value before serialization.
|
* @param string|callable|null $callback: Optional callback to modify the value before serialization.
|
||||||
|
* @param mixed $default: Optional default serialized value. Will be run through the optional callback.
|
||||||
* @return $this
|
* @return $this
|
||||||
*/
|
*/
|
||||||
public function serializeToForum(string $attributeName, string $key, $callback = null)
|
public function serializeToForum(string $attributeName, string $key, $callback = null, $default = null)
|
||||||
{
|
{
|
||||||
$this->settings[$key] = compact('attributeName', 'callback');
|
$this->settings[$key] = compact('attributeName', 'callback', 'default');
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
@ -45,7 +46,7 @@ class Settings implements ExtenderInterface
|
||||||
$attributes = [];
|
$attributes = [];
|
||||||
|
|
||||||
foreach ($this->settings as $key => $setting) {
|
foreach ($this->settings as $key => $setting) {
|
||||||
$value = $settings->get($key, null);
|
$value = $settings->get($key, $setting['default']);
|
||||||
|
|
||||||
if (isset($setting['callback'])) {
|
if (isset($setting['callback'])) {
|
||||||
$callback = ContainerUtil::wrapCallback($setting['callback'], $container);
|
$callback = ContainerUtil::wrapCallback($setting['callback'], $container);
|
||||||
|
|
|
@ -122,6 +122,56 @@ class SettingsTest extends TestCase
|
||||||
$this->assertArrayHasKey('customPrefix.customSetting2', $payload['data']['attributes']);
|
$this->assertArrayHasKey('customPrefix.customSetting2', $payload['data']['attributes']);
|
||||||
$this->assertEquals('customValueModifiedByInvokable', $payload['data']['attributes']['customPrefix.customSetting2']);
|
$this->assertEquals('customValueModifiedByInvokable', $payload['data']['attributes']['customPrefix.customSetting2']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function custom_setting_falls_back_to_default()
|
||||||
|
{
|
||||||
|
$this->extend(
|
||||||
|
(new Extend\Settings())
|
||||||
|
->serializeToForum('customPrefix.noCustomSetting', 'custom-prefix.no_custom_setting', null, 'customDefault')
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->prepDb();
|
||||||
|
|
||||||
|
$response = $this->send(
|
||||||
|
$this->request('GET', '/api', [
|
||||||
|
'authenticatedAs' => 1,
|
||||||
|
])
|
||||||
|
);
|
||||||
|
|
||||||
|
$payload = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('customPrefix.noCustomSetting', $payload['data']['attributes']);
|
||||||
|
$this->assertEquals('customDefault', $payload['data']['attributes']['customPrefix.noCustomSetting']);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function custom_setting_default_passed_to_callback()
|
||||||
|
{
|
||||||
|
$this->extend(
|
||||||
|
(new Extend\Settings())
|
||||||
|
->serializeToForum('customPrefix.noCustomSetting', 'custom-prefix.no_custom_setting', function ($value) {
|
||||||
|
return $value.'Modified2';
|
||||||
|
}, 'customDefault')
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->prepDb();
|
||||||
|
|
||||||
|
$response = $this->send(
|
||||||
|
$this->request('GET', '/api', [
|
||||||
|
'authenticatedAs' => 1,
|
||||||
|
])
|
||||||
|
);
|
||||||
|
|
||||||
|
$payload = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('customPrefix.noCustomSetting', $payload['data']['attributes']);
|
||||||
|
$this->assertEquals('customDefaultModified2', $payload['data']['attributes']['customPrefix.noCustomSetting']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CustomInvokableClass
|
class CustomInvokableClass
|
||||||
|
|
Loading…
Reference in New Issue
Block a user