trilbymedia / grav-plugin-flex-objects

Powerful and supremely flexible object support for Grav
MIT License
38 stars 10 forks source link

Option encode_options: "..." is ignored #179

Open u07 opened 9 months ago

u07 commented 9 months ago

Hi!

When saving flex-objects data with JSON formatter we are allowed to set some options like file_extension, encode_options, decode_assoc, etc. The thing is, encode_options param is not handled. Example:

storage:
            class: 'Grav\Framework\Flex\Storage\FolderStorage'
            options:
                formatter:
                    class: 'Grav\Framework\File\Formatter\JsonFormatter'
                    options:
                        encode_options: 'JSON_UNESCAPED_UNICODE'  # See https://www.php.net/manual/en/function.json-encode.php
                folder: user-data://contacts

Encode options are useful when dealing with non-latin symbols, like Cyrillic. By default Cyrillic is escaped to \u123456. So the JSON looks completely gibberish:

image

Setting encode_options: 'JSON_UNESCAPED_UNICODE' (int 256) should help with that, unless it won't.

All the constants like 'JSON_UNESCAPED_UNICODE' => JSON_UNESCAPED_UNICODE are defined in 'Grav\Framework\File\Formatter\JsonFormatter', but it is never called. Instead grav\vendor\rockettheme\toolbox\File\src\JsonFile.php is used. And the encoding options are never passed to it:

image