Changelog History
Page 1
-
v1.0.0-alpha.1 Changes
July 12, 2022๐ Features
core Minimum PHP version required PHP 8.1.0.
core Core application updated from Slim 3 to Slim 4!
See: Upgrade Guide
- core New PHP-DI added instead of Pimple DI.
See: Usage Guide
console Added Extendable Flextype CLI Application.
Flextype CLI Application 1.0.0-alpha.1 Usage: command [options] [arguments] Options: -h, --help Display help for the given command. When no command is given display help for the list command -q, --quiet Do not output any message -V, --version Display this application version --ansi|--no-ansi Force (or disable --no-ansi) ANSI output -n, --no-interaction Do not ask any interactive question -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug Available commands: about Get information about Flextype. completion Dump the shell completion script help Display help for a command list List commands cache cache:clear Clear cache. cache:clear-config Clear cache config. cache:clear-data Clear cache data. cache:clear-routes Clear cache routes. cache:delete Delete item. cache:delete-multiple Delete mutiple items. cache:get Get item. cache:get-multiple Get multiple items. cache:has Check whether cache item exists. cache:set Set item. cache:set-multiple Set multiple items. entries entries:copy Copy entry. entries:create Create entry. entries:delete Delete entry. entries:fetch Fetch entry. entries:has Check whether entry exists. entries:move Move entry. entries:update Update entry. tokens tokens:create Create a new unique token. tokens:delete Delete token entry. tokens:fetch Fetch token entry. tokens:generate Generate token. tokens:generate-hash Generate token hash. tokens:has Check whether token entry exists. tokens:update Update tokens entry. tokens:verify-hash Verify token hash.
core Added
Thermage
library for better Flextype CLI Application styling.core Added ability to execute specific project related code.
before-plugins
to bootstrap file before plugins intialization.after-plugins
to bootstrap file after plugins intialization.
core Added new core constants:
FLEXTYPE_PROJECT_NAME
,FLEXTYPE_PATH_PROJECT
,FLEXTYPE_PATH_TMP
,FLEXTYPE_START_TIME
.core Added ability to run Flextype in silent mode by disabling
app
andcli
.core Added New Glowy PHP Packages
View
,Macroable
,Strings
,Arrays
,Csrf
,Filesystem
,Registry
,Session
.core Added built-in I18n module.
core Added ability to override default constants
entries Added new functionality that allows implementing Virtual Entries by overriding default entries CRUD methods with the help of events.
entries Added ability to create completely customisable high-level collections for entries with their fields and various formats.
entries Added ability to set custom events for each entries collections.
entries Added ability to create and use entries fields directives.
See: Documentation
- entries Added ability to create custom entries macros.
Built-in macros:
entries
,php
,registry
.entries Added new method
registry
to get entries registry.entries Added new method
options
to get entries options.entries Added new method
setOptions
to set entries options.entries Added new method
setRegistry
to set entries registry.entries Added ability to override logic for built-in custom fields.
Example: If you want to have your custom logic for processing field
uuid
just update flextype project settings.from:
... entries: default: ... fields: ... uuid: enabled: true path: "src/flextype/core/Entries/Fields/Default/UuidField.php" ... ... ... ...
to:
... entries: default: ... fields: ... uuid: enabled: true path: "project/plugins/your-custom-plugin/Entries/Fields/Default/UuidField.php" ... ... ... ...
directives Added new directive
@type
to set field type.directives Added new directive
@markdown
to parse markdown text inside current field.directives Added new directive
@shortcodes
to parse shortcodes text inside current field.directives Added new directive
@textile
to parse textile text inside current field.directives Added new directive
@php
to execute php code text inside current field.directives Added new directive
[[ ]]
to eval expression.endpoints All Rest API Endpoints codebase was rewritten from scratch.
endpoints Added new Rest API Endpoint
POST /api/v1/cache/clear
to clear cache.endpoints Added new Rest API Endpoint
POST /api/v1/tokens/generate
to generate token hash.endpoints Added new Rest API Endpoint
POST /api/v1/tokens/verify-hash
to verify token hash.endpoints Added new Rest API Endpoint
POST /api/v1/tokens
to create token entry.endpoints Added new Rest API Endpoint
PATCH /api/v1/tokens
to update token entry.endpoints Added new Rest API Endpoint
DELETE /api/v1/tokens
to delete token entry.endpoints Added new Rest API Endpoint
GET /api/v1/tokens
to fetch token entry.csrf Added Glowy CSRF protection for Cross Site Request Forgery protection by comparing provided token with session token to ensure request validity.
frontmatter Added ability to define custom frontmatter header parsers for entries. Example: instead of first
---
you may set serializer---json
,---json5
---yaml
or---neon
.serializers Added new serializer
Json5
.
See: Documentation
- serializers Added new serializer
Neon
.
See: Documentation
serializers Added ability to set global settings for all built-in serializers.
src/flextype/settings.yaml
serializers: json: decode: cache: enabled: true string: "" assoc: true depth: 512 flags: 0 encode: options: 0 depth: 512 json5: decode: cache: enabled: true string: "" assoc: true depth: 512 flags: 0 encode: options: 0 depth: 512 yaml: decode: cache: enabled: true string: "" native: true flags: 0 encode: inline: 10 indent: 2 flags: 0 frontmatter: decode: cache: enabled: true string: "" cache_id_string: "" header: serializer: yaml allowed: ['yaml', 'json', 'json5', 'neon'] encode: header: serializer: yaml allowed: ['yaml', 'json', 'json5', 'neon'] neon: decode: cache: enabled: true string: "" encode: blockMode: false indentation: "\t" phparray: decode: cache: enabled: true string: "" encode: wrap: true
serializers Added ability to set specific header serializer for
Frontmatter
serializer (default is YAML).src/flextype/settings.yaml
frontmatter: decode: cache: enabled: true string: "" cache_id_string: "" header: serializer: yaml allowed: ['yaml', 'json', 'json5', 'neon'] encode: header: serializer: yaml allowed: ['yaml', 'json', 'json5', 'neon']
๐ parsers Markdown parser Commonmark updated to v2
๐ parsers Added new Textile parser.
๐ parsers Added ability to set global settings for all parsers.
src/flextype/settings.yaml
parsers: markdown: cache: enabled: true string: "" commonmark: renderer: block_separator: "\n" inner_separator: "\n" soft_break: "\n" commonmark: enable_em: true enable_strong: true use_asterisk: true use_underscore: true unordered_list_markers: ['-', '*', '+'] html_input: 'allow' allow_unsafe_links: false max_nesting_level: 9223372036854775807 slug_normalizer: max_length: 255 textile: cache: enabled: true string: "" restricted: false document_type: 'xhtml' document_root_directory: '' lite: false images: true link_relation_ship: '' raw_blocks: false block_tags: true line_wrap: true image_prefix: '' link_prefix: '' symbol: [] dimensionless_images: true shortcodes: cache: enabled: true string: "" cache_id_string: "" opening_tag: "(" closing_tag: ")" closing_tag_marker: "/" parameter_value_separator: ":" parameter_value_delimiter: "'" shortcodes: entries: enabled: true path: "src/flextype/core/Parsers/Shortcodes/EntriesShortcode.php" fetch: enabled: true php: enabled: true path: "src/flextype/core/Parsers/Shortcodes/PhpShortcode.php" raw: enabled: true path: "src/flextype/core/Parsers/Shortcodes/RawShortcode.php" textile: enabled: true path: "src/flextype/core/Parsers/Shortcodes/TextileShortcode.php" markdown: enabled: true path: "src/flextype/core/Parsers/Shortcodes/MarkdownShortcode.php" registry: enabled: true path: "src/flextype/core/Parsers/Shortcodes/RegistryShortcode.php" get: enabled: true url: enabled: true path: "src/flextype/core/Parsers/Shortcodes/UrlShortcode.php" strings: enabled: true path: "src/flextype/core/Parsers/Shortcodes/StringsShortcode.php" filesystem: enabled: true path: "src/flextype/core/Parsers/Shortcodes/FilesystemShortcode.php" get: enabled: true i18n: enabled: true path: "src/flextype/core/Parsers/Shortcodes/I18nShortcode.php" if: enabled: true path: "src/flextype/core/Parsers/Shortcodes/IfShortcode.php" when: enabled: true path: "src/flextype/core/Parsers/Shortcodes/WhenShortcode.php" unless: enabled: true path: "src/flextype/core/Parsers/Shortcodes/UnlessShortcode.php" uuid: enabled: true path: "src/flextype/core/Parsers/Shortcodes/UuidShortcode.php" const: enabled: true path: "src/flextype/core/Parsers/Shortcodes/ConstShortcode.php" var: enabled: true path: "src/flextype/core/Parsers/Shortcodes/VarShortcode.php" field: enabled: true path: "src/flextype/core/Parsers/Shortcodes/FieldShortcode.php" calc: enabled: true path: "src/flextype/core/Parsers/Shortcodes/CalcShortcode.php" eval: enabled: true path: "src/flextype/core/Parsers/Shortcodes/EvalShortcode.php" type: enabled: true path: "src/flextype/core/Parsers/Shortcodes/TypeShortcode.php"
๐ parsers Added ability to override logic for built-in shortcodes.
Example: If you want to have your custom logic for processing shortcode
url
just update flextype settings.from:
... parsers: shortcodes: shortcodes: ... url: enabled: true path: "src/flextype/core/Parsers/Shortcodes/UrlShortcode.php" ... ... ... ...
to:
... parsers: shortcodes: shortcodes: ... url: enabled: true path: "project/plugins/your-custom-plugin/Parsers/Shortcodes/UrlShortcode.php" ... ... ... ...
routes Added ability to set custom projects routes in
/projects/routes/routes.php
.shortcodes Added new shortcode
(entries)
to fetch entry (or entries collection) or specific field.shortcodes Added new shortcode
(registry)
to fetch data from registry.shortcodes Added new shortcode
(filesystem)
to work with filesystem.shortcodes Added new shortcode
(uuid)
to generate uuid.shortcodes Added new shortcode
(strings)
for strings manipulation.shortcodes Added new shortcode
(textile)
to parse textile text.shortcodes Added new shortcode
(php)
to execute php code.shortcodes Added new shortcode
(eval)
to eval expression.shortcodes Added new shortcode
(calc)
to calculate values.shortcodes Added new shortcode
(type)
to set field type.shortcodes Added new shortcode
(markdown)
to parse markdown text.shortcodes Added new shortcode
(getProjectUrl)
to get project url.shortcodes Added new shortcode
(getBaseUrl)
to get base url.shortcodes Added new shortcode
(getBasePath)
to get base path.shortcodes Added new shortcode
(getAbsoluteUrl)
to get absolute url.shortcodes Added new shortcode
(url)
to get url.shortcodes Added new shortcode
(urlFor)
to get url for route.shortcodes Added new shortcode
(getUriString)
to get uri string.shortcodes Added new shortcode
(filesystem)
to do filesytem manipulations.shortcodes Added new shortcode
(date)
to get date.shortcodes Added new shortcode
(tr)
to returns translation of a string.shortcodes Added new shortcode
(if)
to use logical if conditions.shortcodes Added new shortcode
(when)
to use logical positive if conditions.shortcodes Added new shortcode
(unless)
to use logical negative if conditions.shortcodes Added new shortcode
(var)
to get and set entry variables values.shortcodes Added new shortcode
(field)
to get entry fields values.shortcodes Added new shortcode
(const)
to get defined costants.shortcodes Added new shortcode
(raw)
to ignore shortcodes processing.expressions Added a new configurable and extendable expressions engine with a collection of predefined expressions.
expressions Added new expression function
actions
to get actions service.expressions Added new expression function
collection
to create a new arrayable collection object from the given elements.expressions Added new expression function
collectionFromJson
to create a new arrayable collection object from the given JSON string.expressions Added new expression function
collectionFromString
to create a new arrayable collection object from the given string.expressions Added new expression function
collectionWithRange
to create a new arrayable object with a range of elements.expressions Added new expression function
collectionFromQueryString
to create a new arrayable object from the given query string.expressions Added new expression function
filterCollection
to filter collection.expressions Added new expression function
const
to get defined constants.expressions Added new expression function
var
to get current entry var.expressions Added new expression function
field
to get current entry field.expressions Added new expression function
csrf
to get csrf hidden input.expressions Added new expression function
entries
to get entries service.expressions Added new expression function
filesystem
to get filesystem instance.expressions Added new expression function
strings
to get strings instance.expressions Added new expression function
tr
to return translation of a string. If no translation exists, the original string will be returned.expressions Added new expression function
__
to return translation of a string. If no translation exists, the original string will be returned.expressions Added new expression function
max
to return the highest value in an array, or the highest value of several specified values.expressions Added new expression function
min
to return the lowest value in an array, or the lowest value of several specified values.expressions Added new expression function
ceil
to round a number up to the nearest integer.expressions Added new expression function
floor
to round a number down to the nearest integer.expressions Added new expression function
parsers
to get parsers service.expressions Added new expression function
serializers
to get serializers service.expressions Added new expression function
registry
to get registry service.expressions Added new expression function
slugify
to get slugify service.expressions Added new expression function
date
to get date.expressions Added new expression function
url
to get the url.expressions Added new expression function
urlFor
to get the url for a named route.expressions Added new expression function
fullUrlFor
to get the full url for a named route.expressions Added new expression function
isCurrentUrl
to determine is current url equal to route name.expressions Added new expression function
getCurrentUrl
to get current path on given Uri.expressions Added new expression function
getBasePath
to get the base path.expressions Added new expression function
getBaseUrl
to get the base url.expressions Added new expression function
getAbsoluteUrl
to get the absolute url.expressions Added new expression function
getProjectUrl
to get the project url.expressions Added new expression function
getUriString
to get the uri string.expressions Added new expression function
redirect
to create redirect.cache Added new cache driver
Phparray
to store cache data in raw php arrays files.cache Added router cache.
cache Added ability to set custom cache ID string for
entries
,parsers
andserializers
.tokens Added new Tokens API.
helpers All core helpers are located in the
src/flextype/helpers/
.helpers Added helper function
app
to get Flextype Application instance.helpers Added helper function
container
to get Flextype Application Container instance.helpers Added helper function
emitter
to get Flextype Emitter Service.helpers Added helper function
cache
to get Flextype Cache Service.helpers Added helper function
entries
to get Flextype Entries Service.helpers Added helper function
parsers
to get Flextype Parsers Service.helpers Added helper function
serializers
to get Flextype Serializers Service.helpers Added helper function
logger
to get Flextype Logger Service.helpers Added helper function
session
to get Flextype Session Service.helpers Added helper function
csrf
to get Flextype CSRF Service.helpers Added helper function
plugins
to get Flextype Plugins Service.helpers Added helper function
console
to get Flextype Console Service.helpers Added helper function
imageFile
to create a new image instance for image file.helpers Added helper function
imageCanvas
to create a new image canvas instance.helpers Added helper function
generateToken
to generate unique token.helpers Added helper function
generateTokenHash
to generate unique token hash.helpers Added helper function
verifyTokenHash
to validate token hash.helpers Added helper function
url
to get url.helpers Added helper function
urlFor
to get url for a named route.helpers Added helper function
fullUrlFor
to get full url for a named route.helpers Added helper function
isCurrentUrl
to determine is current url equal to route name.helpers Added helper function
getCurrentUrl
to get current path on given Uri.helpers Added helper function
getBasePath
to get base path.helpers Added helper function
setBasePath
to set base path.helpers Added helper function
redirect
to create redirect.helpers Added helper function
upload
to upload files and process uloaded images.uploder Added Configurable Sirius Uploader for file upload.
# Upload upload: # Uploads directory directory: '/uploads' # Overwrite existing files. overwrite: true # Auto-confirm uploads. autoconfirm: false # Prefixing uploads. prefix: '' # Validation options validation: # Allowed file extensions. allowed_file_extensions: ['gif', 'jpg', 'jpeg', 'png', 'ico', 'webm', 'svg'] # Maximum file size. max_file_size: '24M' # Image validation options image: # Image maxiumum and minimum width width: max: 4920 min: 100 # Image maxiumum and minimum height height: max: 3264 min: 100 # Image ratio #ratio: # The option can be a number (eg: 1.3) or a ratio-like string (eg: 4:3, 16:9). # size: 1.3 # The option error_margin specifies how much the image is allowed to # deviate from the target ratio. Default value is 0. # error_margin: 0 # Process uploaded files process: # Images process settings image: # Image quality quality: 70
macros All core macros are located in the
src/flextype/macros/
.macros Added
onlyFromCollection
andexceptFromCollection
macros for Arrays (#553)actions Added new Actions API (#549)
Usage
Example 1
// Set new action entries.create actions()->set('entries.create', function($id, $data) { return entries()->create($id, $data); }); // Get action entries.create actions()->get('entries.create')('hello-world', []);
Example 2
// Set new action entries.update actions()->set('entries.update', function($id, $data) { if (entries()->update($id, $data)) { logger()->info("Content {$id} successfully updated"); cache()->delete($id); } else { logger()->error("Content {$id} was not updated"); } }); // Get action entries.update actions()->get('entries.update')('hello-world', []);
Example 3
// Set new action entries.create actions()->set('entries.create', function($id, $data) { if(registry()->get('database') == 'MySQL') { // ... create new entry in the MySQL database. } else { return entries()->create($id, $data); } }); // Get action entries.create actions()->get('entries.create')('blog/post-1', []); actions()->get('entries.create')('blog/post-2', []); actions()->get('entries.create')('blog/post-3', []);
The Flextype Actions API provides new capabilities to extend the Flextype core by registering and reusing useful code snippets from global actions namespace.
๐ Bug Fixes
๐ parsers Fixed issue with double cashing.
htaccess Security fixes for
.htaccess
entries Fixed issue when entries collection fetch returns empty result.
๐ plugins Fixed Plugins API translation loading process.
๐ plugins Fixed Plugins API initialization (#551)
๐ plugins Fixed Plugins API dependency initialization.
๐ plugins Fixed Plugins API issue with non valid plugins (#551)
๐ plugins Fixed Plugins API loader issue with disabled plugins.
๐ฅ BREAKING CHANGES
media Media and Glide functionality removed from the flextype core due to security and perfomance reasons. Recomended to use imagekit or imgix instead.
core Use new constant
FLEXTYPE_PATH_PROJECT
instead ofPATH['project']
andFLEXTYPE_PATH_TMP
instead ofPATH['tmp']
.shortcodes New default shortcodes syntax and signatures changes for all shortocodes.
opening_tag: "(" closing_tag: ")" closing_tag_marker: "/" parameter_value_separator: ":" parameter_value_delimiter: '"'
helpers Use new helpers functions to access Flextype Services.
- use
entries()
instead offlextype('entries')
- use
session()
instead offlextype('session')
- use
cache()
instead offlextype('cache')
- use
app()
instead offlextype()
- use
container()
instead offlextype('container_name_here')
- use
parsers()
instead offlextype('parsers')
- use
serializers()
instead offlextype('serializers')
- use
plugins()
instead offlextype('plugins')
- use
emitter()
instead offlextype('emitter')
- use
logger()
instead offlextype('logger')
- use
registry()
instead offlextype('registry')
- use
helpers Use helper function
app
to access Flextype Application instance instead of old helper functionflextype()
.helpers Use helper function
container
to access Flextype Application container instead of old helper functionflextype()
with container name argument.- use
container()->get('entries')
instead offlextype('entries')
- use
container()->set('entries', new Entries())
instead offlextype()['entries'] = new Entries()
- use
helpers Use helper function
filterCollection
instead of oldfilter
.tokens Project tokens moved from
project/tokens
toproject/entries/tokens
.entries Changes for etnries memory storage.
- use
entries()->registry()->get()
instead offlextype('entries')->storage()->get()
- use
entries()->registry()->set()
instead offlextype('entries')->storage()->set()
- use
entries()->registry()->has()
instead offlextype('entries')->storage()->has()
- use
entries()->registry()->delete()
instead offlextype('entries')->storage()->delete()
- use
note: all method from Glowy PHP Arrays are available for Arrays Storage Object manipulations docs: https://github.com/glowyphp/arrays
๐จ Refactoring
core General code refactoring and improvements.
โ tests All unit tests were rewritten.
-
v0.9.16 Changes
January 14, 2021๐ Features
- ๐ parsers: Added commonmark instead of parsedown (#540)
shortcodes: Added new shortcode - media_files_fetch
example:
[media_files_fetch id="entries/home/foo.txt" field="title" default="Bar"]
๐ Bug Fixes
- bootstrap: Fixed include path for dependencies.
๐จ Refactoring
- core: general code refactoring and improvements.
-
v0.9.15 Changes
January 03, 2021๐ Features
- media: Added method
has()
for Media Folders (#534) - entries: simplify functionality to work with online entries storage. (#536)
- ๐ parsers: move markdown and shortcode settings under parsers setting. (#539)
๐ Bug Fixes
- entries: Fixed issue with individual entries cache field (#537)
- ๐ plugins: Fixed issue with empty manifest and settings yaml files (#538)
๐ฅ BREAKING CHANGES
entries: according to this ticket (#536) we have several changes for entries storage.
- use
flextype('entries')->storage()->get()
instead offlextype('entries')->getStorage()
- use
flextype('entries')->storage()->set()
instead offlextype('entries')->setStorage()
- use
flextype('entries')->storage()->has()
instead offlextype('entries')->hasStorage()
- use
flextype('entries')->storage()->delete()
instead offlextype('entries')->deleteStorage()
note: all method from Atomastic Arrays are available for Arrays Storage Object manipulations docs: https://github.com/atomastic/arrays
- use
- media: Added method
-
v0.9.14 Changes
December 30, 2020๐ Features
core: Moving to PHP 7.4.0 (#524)
๐ plugins: Set default plugin priority 100 and SORT them ascending (#523)
๐ Bug Fixes
core: Fixed issue with Rest API endpoints detection. (#522)
entries: Fixed issue with empty variable $data in fetch() method. (#531)
entries: Fixed issue with deleteStorage() method return data.
๐จ Refactoring
- core: general code refactoring and improvements.
-
v0.9.13 Changes
December 20, 2020๐ Features
media-files: we will use
fetch()
method as entry point to execute different methods withfetch
prefix. (#508)/** * Fetch. * * @param string $id The path to file. * @param array $options Options array. * * @access public * * @return self Returns instance of The Arrays class. */ public function fetch(string $id, array $options = []): Arrays
Media Files API is macroable and we will able to Added any custom fetch methods for receiving data from different sources.
flextype('media')->files()::macro('fetchFromOtherStorage', function(string $id, array $options) { // fetch data from Other Storage using $id and $options }); $data = flextype('media')->files()-> fetchFromOtherStorage($id, $options);
media-folders: we will use
fetch()
method as entry point to execute different methods withfetch
prefix. (#509)/** * Fetch. * * @param string $id The path to folder. * @param array $options Options array. * * @access public * * @return self Returns instance of The Arrays class. */ public function fetch(string $id, array $options = []): Arrays
Media Folders API is macroable and we will able to Added any custom fetch methods for receiving data from different sources.
flextype('media')->folders()::macro('fetchFromOtherStorage', function(string $id, array $options) { // fetch data from Other Storage using $id and $options }); $data = flextype('media')->folders()-> fetchFromOtherStorage($id, $options);
entries: we will use
fetch()
method as entry point to execute different methods withfetch
prefix. (#495)/** * Fetch. * * @param string $id Unique identifier of the entry. * @param array $options Options array. * * @access public * * @return mixed */ public function fetch(string $id, array $options = []): Arrays
Entries API is macroable and we will able to Added any custom fetch methods for receiving data from different sources.
flextype('entries')::macro('fetchXML', function(string $id, array $options) { // fetch data from XML using $id and $options }); $data = flextype('entries')->fetchXML($id, $options);
images we will use
media/
folder instead ofuploads/entries/
(#516)serializers: standardise serializers container names with macroable ability. (#518)
New methods to access Serializers:
flextype('serializers')->yaml() flextype('serializers')->json() flextype('serializers')->frontmatter()
Adding macros:
flextype('serializers')::macro('NAME', CALLBACK_FUNCTION() {});
๐ parsers: standardise parsers container names with macroable ability. (#519)
New methods to access Parsers:
flextype('parsers')->shortcode() flextype('parsers')->markdown()
Adding macros:
flextype('parsers')::macro('NAME', CALLBACK_FUNCTION() {});
media: standardise media container names with macroable ability for Media API. (#517)
New macroable common class for all media -
class Media
New methods to access Media API:
flextype('media')->files() flextype('media')->files()->meta() flextype('media')->folders() flextype('media')->folders()->meta()
Adding macros:
flextype('media')::macro('NAME', CALLBACK_FUNCTION() {}); flextype('media')->files()::macro('NAME', CALLBACK_FUNCTION() {}); flextype('media')->files()->meta()::macro('NAME', CALLBACK_FUNCTION() {}); flextype('media')->folders()::macro('NAME', CALLBACK_FUNCTION() {}); flextype('media')->folders()->meta()::macro('NAME', CALLBACK_FUNCTION() {});
fields Added new field
registry.get
for Registry API (#494)Registry API provides method
get()
for retrieving data from registry and we should able to access them inside entries frontmatter header for retrieving data right in the entries.Basic Example
Sample entry with several queries and with several nested queries inside of children entries.
File:
/project/entries/registry-root/entry.md
--- title: Root registry: get: flextype: key: flextype.manifest.name author.name: key: flextype.manifest.author.name license: key: flextype.manifest.license entries: fetch: level1: id: registry-root/level-1 ---
Setting for this fields
File:
/project/config/flextype/settings.yaml
entries: fields: registry: get: enabled: true
Valid values for setting enabled is true or false
fields Added new field
entries.fetch
for Entries API (#492)Entries API provides methods for entries fetch:
fetch()
and we should able to access them inside entries frontmatter header for fetching data right in the entries. Also, we will able to Added and use any kind of fetch methods with our macroable functionality.Basic Example
Catalog entry with several queries and with several nested queries inside of children entries.
File:
/project/entries/catalog/entry.md
--- title: Catalog visibility: visible entries: fetch: label1: id: discounts/50-off options: filter: limit: 4 bikes: id: catalog/bikes options: collection: true filter: where: - key: brand operator: eq value: gt limit: 10 discounts: id: discounts options: collection: true filter: where: - key: title operator: eq value: '30% off' - key: category operator: eq value: bikes ---
Setting for this fields
File:
/project/config/flextype/settings.yaml
entries: fields: entries: fetch: enabled: true result: toObject
Valid values for setting enabled is true or false
Valid values for setting result is toObject or toArrayfields Added new field
media.files.fetch
andmedia.folders.fetch
for Media API's (#501) (#500)Media API's provides methods for files and folders fetch:
fetch()
and we should able to access them inside entries frontmatter header for fetching data right in the entries. Also, we will able to Added and use any kind of fetch methods with our macroable functionality.--- title: Media media: folders: fetch: macroable_folder: id: 'foo' options: method: fetchExtraData foo_folder: id: 'foo' collection_of_folders: id: '/' options: collection: true files: fetch: macroable_file: id: 'foo' options: method: fetchExtraData foo_file: id: foo.txt collection_of_files: id: '/' options: collection: true ---
Setting for this fields
File:
/project/config/flextype/settings.yaml
entries: fields: media: files: fetch: enabled: true result: toObject folders: fetch: enabled: true result: toObject
Valid values for setting enabled is true or false
Valid values for setting result is toObject or toArrayentries: Added new method
deleteStorage()
for Entries API (#498)entries: Added new method
hasStorage()
for Entries API (#497)core: Added new method
isApiRequest
to Determine API Request in the basic core functionality. (#507)rest-api-entries Added ability to send options for
fetch()
methods in Entries Rest API. (#504)Fetch single
GET /api/entries?id=YOUR_ENTRY_ID&token=YOUR_ENTRIES_TOKEN
Fetch single with options
GET /api/entries?id=YOUR_ENTRY_ID&options=[filter]&token=YOUR_ENTRIES_TOKEN
Fetch collection
GET /api/entries?id=YOUR_ENTRY_ID&options[collection]=true&token=YOUR_ENTRIES_TOKEN
Fetch collection with options
GET /api/entries?id=YOUR_ENTRY_ID&options[collection]=true&options=[find]&[filter]&token=YOUR_ENTRIES_TOKEN
rest-api-entries Added ability to call macroable fetch methods. (#505)
With help of query option
?options[method]=
we should able to call any macroable fetch methods.Example
Macroable method XML
flextype('entries')::macro('fetchXml', function(string $id, array $options) { return ['XML DATA HERE']; });
HTTP GET:
GET /api/entries?id=YOUR_ID&options[method]=fetchXml&token=YOUR_ENTRIES_TOKEN
rest-api-media reorganize endpoints for Media Rest API (#514)
rest-api-media Added ability to call macroable fetch methods for Folder. (#512)
With help of query option
?options[method]=
we should able to call any macroable fetch methods.Example
Macroable method
flextype('media')->folders()::macro('fetchFromOtherStorage', function(string $id, array $options) { // fetch data from Other Storage using $id and $options });
HTTP GET:
GET /api/folders?id=YOUR_MEDIA_FILES_ID&options[method]= fetchFromOtherStorage&token=YOUR_MEDIA_FOLDERS_TOKEN
rest-api-media Added ability to call macroable fetch methods for Files. (#513)
With help of query option
?option[method]=
we should able to call any macroable fetch methods.Example
Macroable method
flextype('media')->files()::macro('fetchFromOtherStorage', function(string $id, array $options) { // fetch data from Other Storage using $id and $options });
HTTP GET:
GET /api/files?id=YOUR_MEDIA_FILES_ID&option[method]=fetchFromOtherStorage&token=YOUR_MEDIA_FILES_TOKEN
๐ Bug Fixes
fields Fixed issue with slug field in Entries API (#520)
core: Fixed issue with invalid timezone setting (#490)
entries: Fixed issue with not exists entries collections. (#503)
entries: Fixed issue with collisions in Entries API $storage for entries fetching. (#496)
rest-api-entries Fixed issue with 404 status code in Entries Rest API (#502)
rest-api: Fixed issue with Rest API endpoints initialisation. (#506)
๐ฅ BREAKING CHANGES
media: standardise media container names with macroable ability for Media API. (#517)
NEW CONTAINER OLD CONTAINER media media_files, media_files_meta, media_folders, media_folders_meta ๐ parsers: standardise parsers container names with macroable ability. (#519)
NEW CONTAINER OLD CONTAINER parsers shortcode, markdown serializers: standardise serializers container names with macroable ability. (#518)
NEW CONTAINER OLD CONTAINER serializers yaml, json, frontmatter rest-api-media reorganize endpoints for Media Rest API (#514)
NEW ENDPOINT OLD ENDPOINT GET /api/media/files /api/files POST /api/media/files /api/files PUT /api/media/files /api/files PATCH /api/media/files /api/files DELETE /api/media/files /api/files POST /api/media/files/copy /api/files/copy PATCH /api/media/files/meta /api/files/meta POST /api/media/files/meta /api/files/meta DELETE /api/media/files/meta /api/files/meta GET /api/media/folders /api/folders POST /api/media/folders /api/folders PATCH /api/media/folders /api/folders DELETE /api/media/folders /api/folders POST /api/media/folders/copy /api/folders/copy Tokens:
- token for files should be moved from
/tokens/files/
to/tokens/media/files/
- token for folders should be moved from
/tokens/folders/
to/tokens/media/folders/
Settings:
api: ... media: files: enabled: true default_token: folders: enabled: true default_token:
- token for files should be moved from
helpers
filter
helper returnarray
result every time and notint
orbool
. (#493)helpers
filter
helper not supportslice_offset
andslice_limit
because they are are duplicates already exists functionalityoffset
andlimit
. (#493)helpers
filter
helper not supportcount
andexists
. (#493)entries: we have changes in the events names for Entries API (#499)
Events:
onEntriesFetch
onEntriesFetchSingle instead of onEntryInitialized
onEntriesFetchSingleCacheHasResult instead of onEntryAfterCacheInitialized
onEntriesFetchSingleNoResult
onEntriesFetchSingleHasResult instead of onEntryAfterInitialized
onEntriesFetchCollection instead of onEntriesInitialized
onEntriesFetchCollectionHasResult instead of onEntriesAfterInitialized
onEntriesFetchCollectionNoResult
onEntriesMove instead of onEntryMove
onEntriesUpdate instead of onEntryUpdate
onEntriesCreate instead of onEntryCreate
onEntriesDelete instead of onEntryDelete
onEntriesCopy instead of onEntryCopy
onEntriesHas instead of onEntryHasentries: Flextype EMS structure is changes because of issues with collisions (#496)
Updated structure:
$storage = [ 'fetch' => [ 'id' => '', 'data' => [], 'options' => [ 'find' => [], 'filter' => [], ], ], 'create' => [ 'id' => '', 'data' => [], ], 'Updated' => [ 'id' => '', 'data' => [], ], 'delete' => [ 'id' => '', ], 'copy' => [ 'id' => '', 'newID' => '', ], 'move' => [ 'id' => '', 'newID' => '', ], 'has' => [ 'id' => '', ], ];
rest-api-entries Entries Rest API - for collection fetch we should define this in the request query
&options[collection]=true
rest-api-entries Entries Rest API - instead of
&filter=[]
we should define filtering in the request query like this&options[find]
and&options[filter]
rest-api-media-files Media Files Rest API - for collection fetch we should define this in the request query
&options[collection]=true
rest-api-media-folders Media Folders Rest API - instead of
&filter=[]
we should define filtering in the request query like this&options[find]
and&options[filter]
images we will use
media/
folder instead ofuploads/entries/
(#516)- folder
uploads/entries/
should should be renamed tomedia/entries/
related to this ticket: #515 - in the endpoint
/api/images/{path:.+}
path for entries, should starts with/entries/
.
Example:
old:
/api/images/home/banner.jpg
new:/api/images/entries/home/banner.jpg
- folder
entries: we should use only
fetch()
method as entry point to execute different methods withfetch
prefix. (#495)- method
fetchSingle()
removed. Usefetch($id, $options)
method. - methods
fetchCollection
removed. Usefetch($id, ['collection' => true])
method.
- method
media-folders: we should use only
fetch()
method as entry point to execute different methods withfetch
prefix. (#509)- method
fetchSingle()
removed. Usefetch($id, $options)
method. - methods
fetchCollection
removed. Usefetch($id, ['collection' => true])
method.
- method
media-files: we should use only
fetch()
method as entry point to execute different methods withfetch
prefix. (#508)- method
fetchSingle()
removed. Usefetch($id, $options)
method. - methods
fetchCollection
removed. Usefetch($id, ['collection' => true])
method.
- method
-
v0.9.12 Changes
December 07, 2020๐ Features
core: Added Atomastic Components instead of Flextype Components (#478)
Added:
- atomastic/session
- atomastic/arrays
- atomastic/filesystem
- atomastic/registry
- atomastic/strings
entries: Entries API return Arrays Object instead of plain array on fetch. (#485)
From no we have ability to work with entries singles and collections as with smart objects for further data manipulations with help of Atomastic Arrays Component.
Example:
// Fetch random 10 posts created by Awilum and sort them by published_at field. $posts = flextype('entries') ->fetchCollection('blog') ->where('author.name', 'eq', 'Awilum') ->sortBy('published_at') ->limit(10) ->random();
entries: Standardize Entries API fetch. (#486)
entries: Standardize Media Files API fetch. (#487)
entries: Standardize Media Folders API fetch. (#488)
entries: Added ability to extend Core class with Macros. (#489)
cache: Added new cache engine - PHPFastCache instead of Doctrine Cache (#457)
New config for PhpFastCache
https://github.com/flextype/flextype/blob/dev/src/flextype/settings.yaml#L127-L241
New methods from PhpFastCache
We are start using PhpFastCache PSR16 adapter
https://github.com/PHPSocialNetwork/phpfastcachecore: Unit Test powered by PestPHP.
media: Added new
move()
method instead ofrename()
entries: Added new
move()
method instead ofrename()
core: Added new
PATH['tmp']
constant (#470)Now we have:
PATH['tmp']
constant instead ofPATH['cache']
andPATH['logs']
markdown: Added markdown basic settings (#471)
markdown: auto_line_breaks: false auto_url_links: false escape_markup: false
markdown: Added ability to access markdown parser instance (#468)
Usage:
$markdown = flextype('markdown')->getInstance();
entries: Added new Flextype Entries Memory Storage (Flextype EMS). New private property
$storage
for storing current requested entry(or entries) data and all Entries CRUD operations data in memory with ability to change them dynamically on fly. New public methodsgetStorage()
setStorage()
(#467)Structure (Flextype EMS):
$storage = [ 'fetch' => [ 'id' => '', 'data' => '', ], 'create' => [ 'id' => '', 'data' => '', ], 'Updated' => [ 'id' => '', 'data' => '', ], 'delete' => [ 'id' => '', ], 'copy' => [ 'id' => '', 'new_id' => '', ], 'move' => [ 'id' => '', 'new_id' => '', ], 'has' => [ 'id' => '', ], ];
Accessing storage example:
flextype('emitter')->AddedListener('onEntryAfterInitialized', static function () : void { flextype('entries')->setStorage('fetch.data.title', 'New title'); }); $entry = flextype('entries')->fetchSingle('about'); echo $entry['title'];
entries: Added new events:
onEntryHas
,onEntryInitialized
,onEntriesInitialized
(#467)helpers Added new support helper
find()
for files and directories searching instead offind_filter()
helpers Added new support helper
filter()
for data collection filtering instead ofarrays_filter()
๐ Bug Fixes
entries: Fixed issue with
delete()
method (#465)media: Fixed issue with
exif_read_data()
on files upload.
๐จ Refactoring
- entries: Removed App from all core namespaces (#469)
๐ฅ BREAKING CHANGES
entries: removed properties from Entries API (#467)
$entry_id $entry $entry_create_data $entry_update_data $entries_id $entries
Use public methods
getStorage()
setStorage()
instead.Example:
// old flextype('entries')->entry['title'] = 'New title'; // new flextype('entries')->setStorage('fetch.data.title', 'New title'); // old $title = flextype('entries')->entry['title']; // new $title = flextype('entries')->getStorage('fetch.data.title'); $title = flextype('entries')->getStorage('fetch.data')['title'];
core: Removed App from all core namespaces (#469)
We should have
use Flextype\Foundation\Entries\Entries;
instead of
use Flextype\App\Foundation\Entries\Entries;
core: use new
PATH['tmp']
constant instead ofPATH['cache']
andPATH['logs']
(#470)cache: old cache config removed, use new config for PhpFastCache (#457)
cache: use methods
has()
set()
get()
instead ofcontains()
save()
fetch()
(#457)core: Removed flextype-components/session (#473)
core: Removed flextype-components/cookie (#473)
core: Removed flextype-components/number (#474)
core: Removed flextype-components/filesystem (#474)
core: Removed flextype-components/arrays (#474)
-
v0.9.11 Changes
August 25, 2020๐ Features
๐ New helper function added for access all Flextype features in one place
flextype($container\_name = null, $container = [])
IMPORTANT
Do not use
$flextype
object to access Flextype features, useflextype()
helper function.๐ Bug Fixes
- core fix bug - Cannot access protected property Flextype\App\Foundation\Flextype::$container (#462)
- core fix bug - Cannot use object of type Flextype\App\Foundation\Flextype as array (#461)
- media fix Media exif_read_data warning - File not supported (#464)
๐จ Refactoring
- ๐ plugins remove $flextype variable from plugins init method.
- entries update return type for fetch() method.
- entries add additional check for getTimestamp() method in the getCacheID()
- entries remove dead code from fetchCollection() method.
โก๏ธ Vendor Updates
- core: Update vendor flextype-components/filesystem to 2.0.8
- core: Update vendor ramsey/uuid to 4.1.1
โก๏ธ Update from Flextype 0.9.10 to Flextype 0.9.11
- Backup your Site First!
- Read BREAKING CHANGES section!
Download flextype-0.9.11.zip ๐ป 4. Unzip the contents to a new folder on your local computer. ๐ 5. Remove on your server this folders and files:
src/ vendor/ index.php
Upload on your server this folders and files:
src/ vendor/ index.php
๐ป 7. Clear browser cache!
-
v0.9.10 Changes
August 19, 2020๐ Features
core Moving to PHP 7.3.0 (#456)
core add new class
Flextype
that extendsSlim\App
(#458)with methods:
/** * Get Dependency Injection Container. * * @param string $key DI Container key. */ public function container(?string $key = null) /** * Returns Flextype Instance */ public static function getInstance() /** * This method will returns the current Flextype version */ public static function getVersion() : string
collection Add
only()
method for Collection (#455)Example:
...->only(['id', 'title'])->...
entries Rename path to id in Entries API (#453)
๐ New implementation
// Entry properties $entry_id $entries_id // Arguments $id $new_id
shortcode add New Shortcode (#454)
[raw] Raw shortcode content [/raw]
shortcode add New Shortcode Methods (#454)
// Get shortcode instance. getInstance() // Add shortcode handler. addHandler(string $name, $handler) // Add event handler. addEventHandler($name, $handler) // Processes text and replaces shortcodes. process(string $input, bool $cache = true)
๐ Bug Fixes
- entries fix issue with entries paths on Windows (#460)
- cache fix issue with
purge()
method. (#451) - entries fix wrong Implementation of Slug Field for Entries (#452)
- entries add new entry field
id
(#452)
๐ฅ BREAKING CHANGES
entries Rename path to id in Entries API (#453)
Old Entry properties
$entry_path $entries_path
๐ New Entry properties
$entry_id $entries_id
entries fix wrong Implementation of Slug Field for Entries (#452)
From now we have entry fields:
slug
with current entry slug.Example:
flextype-0.9.10
id
with current entry full path as it is was for slug field.Example:
blog/flextype-0.9.10
shortcode We should use
process()
method instead ofparse()
for shortcode processing. (#454)Example of new usage in PHP:
...->shortcode->process($input, $cache);
core
$container
,$flextype
and$app
objects removed! (#458)We should use new object
$flextype
as it is a consolidate entry point to all Flextype features.Here is some examples:
// OLD $app->get(...) $app->post(...) ... // NEW $flextype->get(...) $flextype->post(...) ... // OLD $container['registry'] = static function ($container) { return new Registry($container); }; $container->registry->get(...) // NEW $flextype->container()['registry'] = static function () use ($flextype) { return new Registry($flextype); }; $flextype->container('registry')->get(....)
core class
Container
removed! (#458)We should use
$flextype
object to access all Flextype features inside Service Controllers and Models.Here is some examples:
// OLD class FooController extends Container { public function bar() { return $this->registry->get('.....'); } } // NEW class FooController { protected $flextype; public function __construct($flextype) { $this->flextype = $flextype; } public function bar() { return $this->flextype->container('registry')->get('.....'); } }
โก๏ธ Update from Flextype 0.9.9 to Flextype 0.9.10
- Backup your Site First!
- Read BREAKING CHANGES section!
Download flextype-0.9.10.zip ๐ป 4. Unzip the contents to a new folder on your local computer. ๐ 5. Remove on your server this folders and files:
src/ vendor/ index.php
Upload on your server this folders and files:
src/ vendor/ index.php
๐ 7. Remove folder
var/
! ๐ป 8. Clear browser cache! -
v0.9.9 Changes
August 05, 2020๐ Features
core Moving to PHP 7.2.5 #444
core Add PhpArrayFileAdapter and set PhpArrayFile Cache as a default fallback cache driver instead of Filesystem Cache driver. This new feature give us performance boost up to 25%
core Add preflight to Flextype basic checks and performance boost.
core Update all namespaces and core infrastructure. #437
core Add Symfony Finder Component and
find_filter()
helper.cache Cache API improvements
- Cache ID generation enhancements
- add new public function
fetchMultiple(array $keys)
- add new public function
saveMultiple(array $keysAndValues, $lifetime = 0)
- add new public function
deleteMultiple(array $keys)
- add new public function
deleteAll()
- add new public function
flushAll()
- add new public function
purge(string $directory)
- add new public function
purgeAll()
- add new public function
getStats()
- add new events
onCacheBeforePurgeAll
,onCacheAfterPurgeAll
,onCacheBeforePurge
,onCacheAfterPurge
core New Media API for work with media uploads.
๐ New objects:
$flextype['media_files_meta'] $flextype['media_folders_meta'] $flextype['media_files'] $flextype['media_folders']
๐ See: http://docs.flextype.org/en/core/media
core New simplified parsers and serializers functionality #438
๐ New objects:
$flextype['markdown'] $flextype['shortcode'] $flextype['json'] $flextype['yaml'] $flextype['frontmatter']
๐ New methods:
$flextype->markdown->parse(string $input) $flextype->shortcode->add(string $name, $handler) $flextype->shortcode->parse(string $input, bool $cache = true) $flextype->json->decode(string $input, bool $cache = true, bool $assoc = true, int $depth = 512, int $flags = 0) $flextype->json->encode($input, int $options = 0, int $depth = 512) : string $flextype->yaml->decode(string $input, bool $cache = true, int $flags = 0) : array $flextype->yaml->encode($input, int $inline = 2, int $indent = 4, int $flags = 0) : string $flextype->frontmatter->decode(string $input, bool $cache = true) $flextype->frontmatter->encode($input) : string
entries New simplified logic for entries methods:
fetch()
fetchSingle()
andfetchCollection()
โก๏ธ We are stop doing unneeded things like extra scanning folders and files updates and etc... for fetching entries collections that's slowdowns the fetching process.
We have improved filtering abilities for entries collections.
From now there is a possible to path a much more rules for collections filtering inside the
fetchCollection()
and with using a standalone helper functions likecollect_filter()
andfind_filter()
public function fetch(string $path, bool $collection = false, $filter = []) : array
Fetch single entry or collections of entries.public function fetchSingle(string $path) : array
Fetch single entry.public function fetchCollection(string $path, $filter = []) : array
Fetch entries collection.
๐ See: http://docs.flextype.org/en/core/entries#methods
entries New events added for Entries API.
onEntryCreate onEntryCopy onEntryRename onEntryDelete onEntryUpdate onEntryAfterCacheInitialized onEntryAfterInitialized onEntriesAfterInitialized
entries New decoupled and configurable fields added for entries instead of hardcoded.
Entry fields decoupled into:
/flextype/Foundation/Entries/Fields/
Entry fields added into
flextype.settings.entries.fields
fields: slug: enabled: true published_at: enabled: true published_by: enabled: true modified_at: enabled: true created_at: enabled: true created_by: enabled: true routable: enabled: true parsers: enabled: true visibility: enabled: true uuid: enabled: true
entries Add ability to set individual cache control for specific entries.
cache: enabled: true or cache: enabled: false
entries Add new Entries API class properties.
/** * Current entry path * * @var string * @access public */ public $entry_path = null; /** * Current entry create data array * * @var array * @access public */ public $entry_create_data = []; /** * Current entry create data array * * @var array * @access public */ public $entry_update_data = [];
collections New Collection functionality on top of Doctrine Collections.
We are able to use collections for any type of items, not just for entries.
๐ New Collection are simple and powerful!๐ See: http://docs.flextype.org/en/core/collections
settings Set max_file_size 8mb for uploads.
yaml YAML set default inline = 5 and indent = 2
vendors New Arrays library for Accessing PHP Arrays via DOT notation.
rest-api New Files Rest API.
Method Endpoint Description GET /api/files Fetch file(files) POST /api/files Upload file PUT /api/files Rename file PUT /api/files/copy Copy file DELETE /api/files Delete file โก๏ธ PATCH /api/files/meta โก๏ธ POST /api/files/meta DELETE /api/files/meta Delete file meta information rest-api New Folders Rest API.
Method Endpoint Description GET /api/folders Fetch folder(folders) POST /api/folders Create folder PUT /api/folders Rename folder PUT /api/folders/copy Copy folder DELETE /api/folders Delete folder ๐ Bug Fixes
- frontmatter remove UTF-8 BOM if it exists.
- frontmatter fix line endings to Unix style.
- entries fix method
rename()
in Entries API #433 - entries fix issue with parsing content on entry fetch #441
- rest-api fix Rest API JSON Response #445
- core fix all namespaces #437
- core fix flextype config loading.
- serializers fix YAML native parser.
- ๐ plugins fix method
getPluginsCacheID()
for Plugins API
๐จ Refactoring
- pimple remove unused $flextype variable and cleanup dependencies.
- yaml save and mute error_reporting for native YAML parser.
- cors remove unused parameter $args
- ๐ plugins remove dead variables.
- shortcode update return type for shortcode add() method.
- cache update $driver type for DoctrineCache.
โก๏ธ Vendor Updates
- core: Update vendor league/glide to 1.6.0
- core: Update vendor doctrine/cache to 1.10.2
- core: Update vendor doctrine/collections to 1.6.6
- core: Update vendor respect/validation to 2.0.16
- core: Update vendor monolog/monolog to 2.1.1
- core: Update vendor thunderer/shortcode to 0.7.4
- core: Update vendor flextype-components/filesystem to 2.0.7
- core: Update vendor flextype-components/registry to 3.0.0
- core: Update vendor flextype-components/number to 1.1.1
- core: Update vendor composer/semver to 3.0.0
- core: Update vendor symfony/yaml to 5.1.3
- core: Update vendor ramsey/uuid to 4.1.0
๐ฅ BREAKING CHANGES
- entries Wildcard * removed from parsers field.
- entries Cache setup removed from parsers field.
- settings
/project/config/settings.yaml
move to/project/config/flextype/settings.yaml
- constants remove constant
PATH['config']
, use -PATH['project'] . '/config/'
- core: remove Date Component from the system.
- core: remove Text Component from the system.
- cache: removed methods clear() and clearAll(), use purge() and purgeAll() instead.
- cache: change return type for methods
save()
,delete()
from void too bool.
โก๏ธ Update from Flextype 0.9.7 to Flextype 0.9.8
- Backup your Site First!
- Read BREAKING CHANGES section!
Download flextype-0.9.9.zip ๐ป 4. Unzip the contents to a new folder on your local computer. ๐ 5. Remove on your server this folders and files:
/src/ /vendor/ /index.php
Upload on your server this folders and files:
/src/ /vendor/ /index.php
๐ป 7. Clear browser cache!
-
v0.9.8 Changes
May 14, 2020๐ Features
core: New lightweight and powerful core for kickass Applications!
core: New Content Management API (CMA) for Entries. #421
The Content Management API (CMA), is a read-write API for managing content.
You could use the CMA for several use cases, such as:
- Automatic imports from WordPress, Joomla, Drupal, and more.
- Integration with other backend systems, such as an e-commerce shop.
- Building custom editing experiences.
Endpoints for Content Management API:
Method Endpoint Description GET /api/management/entries Fetch entry(entries) POST /api/management/entries Create entry โก๏ธ PATCH /api/management/entries PUT /api/management/entries Rename entry PUT /api/management/entries/copy Copy entry(entries) DELETE /api/management/entries Delete entry API Tokens folder: /project/tokens/management/entries
core: New Images API.
Method Endpoint Description GET /api/images Fetch image API Tokens folder: /project/tokens/images
core: New Access API to create secret tokens for Content Management API (CMA).
API Tokens folder: /project/tokens/access
core: add Container for extending Flextype Container instead of Controller(s)
core: add Application URL
url
into the common Flextype settings #405core: add new improved plugins sorting in the Plugins API.
core: add dependencies validation for Plugins API #411
core: add configurable CORS (Cross-origin resource sharing).
cors: enabled: true origin: "*" headers: ["X-Requested-With", "Content-Type", "Accept", "Origin", "Authorization"] methods: [GET, POST, PUT, DELETE, PATCH, OPTIONS] expose: [] credentials: false
core: add manifest file
/src/flextype/config/flextype.yaml
for Flextype.core: add Serializer for data encoding/decoding and Parser for data parsing #424
๐ Bug Fixes
- core: fix incorrect data merging of manifest and settings for plugins and themes #404
๐ฅ BREAKING CHANGES
core: core decoupled in the plugins, and moved out of the Flextype release package!
๐ Install all needed plugins for your project by your self.
๐ Browse plugins: https://github.com/flextype-pluginscore: new way for data merging of manifest and settings for plugins and themes #404
for e.g. this is a wrong code to access site title:
{{ registry.plugins.site.title|e('html') }}
and this is a correct code to access site title:
{{ registry.get('plugins.site.settings.title')|e('html') }}
core: We should add app
url
into the core instead ofbase_url
andsite_url
#405for e.g. this is a wrong code to access site url:
{{ registry.plugins.site.url }}
and this is a correct code to access app url:
{{ registry.get('flextype.settings.url') }}
core: new
project
folder instead ofsite
- rename folder
site
intoproject
- use new constant PATH['project'] instead of constant PATH['site']
core: removed constants
- PATH['plugins']
- PATH['themes']
- PATH['entries']
- PATH['themes']
- PATH['snippets']
- PATH['fieldsets']
- PATH['tokens']
- PATH['accounts']
- PATH['uploads']
core: removed Snippets functionality
โก๏ธ Update from Flextype 0.9.7 to Flextype 0.9.8
- Backup your Site First!
- Read BREAKING CHANGES section!
Download flextype-0.9.8.zip ๐ป 4. Unzip the contents to a new folder on your local computer. ๐ 5. Remove on your server this folders and files:
/flextype/ /vendor/ /index.php
Upload on your server this folders and files:
/src/ /vendor/ /index.php
Rename
/site/
to/project/
๐ป 8. Clear browser cache!Create CDA, CMA and Access tokens for your project using this webpage.