Member names are converted to kebab-case
geoidesic opened this issue · comments
Noel da Costa commented
I'm passing through this data:
(
[id] => 1
[customer_name] => My Company
[vat_registered] => 1
[vat_number] => 12345678
[vat_percentage] => 20
[currency_symbol] => £
[created] => Cake\I18n\FrozenTime Object
(
[date] => 2020-07-12 09:23:24.000000
[timezone_type] => 3
[timezone] => UTC
)
[modified] => Cake\I18n\FrozenTime Object
(
[date] => 2020-07-12 09:23:24.000000
[timezone_type] => 3
[timezone] => UTC
)
[[new]] =>
[[accessible]] => Array
(
[customer_name] => 1
[vat_registered] => 1
[vat_number] => 1
[vat_percentage] => 1
[currency_symbol] => 1
[created] => 1
[modified] => 1
)
[[dirty]] => Array
(
)
[[original]] => Array
(
)
[[virtual]] => Array
(
)
[[hasErrors]] =>
[[errors]] => Array
(
)
[[invalid]] => Array
(
)
[[repository]] => Settings
)
This is passed like so: $encoder->encodeData($data);
The output converts the member names from snake-case to kebab-case.
{
"data": {
"type": "settings",
"id": "1",
"attributes": {
"created": "2020-07-12T09:23:24+00:00",
"modified": "2020-07-12T09:23:24+00:00",
"customer-name": "My Company",
"vat-registered": "1",
"vat-number": "12345678",
"vat-percentage": 20,
"currency-symbol": "\u00a3"
},
"links": { "self": "/api/settings/1" }
}
}
Note that e.g. vat_registered
is converted to vat-registered
.
This is problematic for a number of reasons:
- Kebab-case is not useful in most modern JavaScript frameworks – i.e. cannot be used in element directives and will not compile.
- The JSONAPI spec suggests that member names should be camelCase, not kebab-case: https://jsonapi.org/recommendations/
Please advise.
Noel da Costa commented
Actually this is not due to anything in this library. My bad.