7.1.0 (2021-05-02)

Overview of merged pull requests

!!! FEATURE: Enable URL Rewriting by default

This flips the default behavior for the FLOW_REWRITEURLS environment variable: If it is _not_ specified (or contains a value other than 0) URL rewriting will be enabled.

Previously URL rewriting was enabled with a corresponding SetEnv configuration for Apache. For other servers and CLI a corresponding configuration (or a putenv('FLOW_REWRITEURLS=1') call at runtime) was required in order to activate URL rewriting.

This could be a breaking change in case you relied on the previous behavior. For example: Using the UriBuilder in CLI previously created URLs in the format /index.php/some/path. Now it will lead to /some/path by default. To re-establish the former behavior, the FLOW_REWRITEURLS can be set to 0 explicitly, for example via putenv('FLOW_REWRITEURLS=1');.

  • Packages: Flow

FEATURE: Allow flushing caches by compiled classes

This adds a signal to the proxy compiler when classes have been compiled and a slot to the a new AnnotationsCacheFlusher class that checks the compiled classes for existing annotations and flushes matching configured caches. This is required when annotations are used to change configuration, like the @Flow\\Route or @Flow\\Privilege annotations.

Related to https://github.com/neos/flow-development-collection/pull/2421 Related to https://github.com/neos/flow-development-collection/pull/2412

  • Packages: Flow

FEATURE: Make rendering of request in exception log configurable

With this it is possible to configure if the request data should be rendered into exception stack traces with the newly added configuration setting Neos.Flow.log.throwables.renderRequestInformation.

  • Related: #2360

  • Packages: Flow

FEATURE: Cli ProgressBar is public accessible

What I did

The access modifier for getProgressBar() in ConsoleOutput.php is now public.

I’m using reflection to access the progressbar in a project to use symfonie’s time estimation for a long running command. I think there shouldn’t be much harm in just making getProgressBar() public.

Maybe this could go into the 7.1 release?

Symfony Progressbar Docs

  • Packages: Flow

FEATURE: Add fusion template support

With this it is possible to specify the option --generate-fusion for the kickstart:actioncontroller command, which will generate .fusion files instead of Fluid templates and a Root.fusion in the according folders.

Depends on https://github.com/neos/neos-development-collection/pull/3255

  • Packages: Flow Kickstarter

FEATURE: Add rfc6750 bearer token

Adds the bearer token class to extract a rfc6750 bearer token from the HTTP header.

  • Packages: Flow

FEATURE: Introduce ability to add Fluid namespaces via configuration

What I did Added the ability to add Fluid namespaces via configuration.

How I did it By adding a new configuration option: ``` Neos:



``` This configuration is used, to add namespaces inside the ViewHelperResolver.

How to verify it Add a default namespace in Settings.yaml and try to use its view helpers in any template, without including the namespace there.

  • Resolves: #2375

  • Packages: Flow FluidAdaptor

FEATURE: Expose array_values() in Array eelHelper

related to: https://github.com/neos/neos-development-collection/issues/3287

  • Packages: Flow Eel

BUGFIX: Ignore annotation properties that start with underscore when rendering

This fixes an error when using annotations that use internal public properties starting with an underscore, like zircote/swagger-php. This is only a workaround for the more generic problem of rendering annotations that contain publicly accessible internal state. Optimally rendering annotations for proxies would only be based on the information provided by the original annotation, like PHP 8 Attributes do. Alternatively docblocks would not be altered in proxies at all and just copied, but this would potentially be a breaking change.

  • Resolves: #2387

  • Packages: Flow

BUGFIX: Support nested fluid variables by using the original fluid method

With this patch it’s possible to use the fluid variable nesting feature as well as a specific accessor per element on the path.

How to use it

Create a fluid template with nested variables that access an array value: `html {config.{type}.value.{flavor}} ` Assign an array and the two keys: `php $this->view->assign('type', 'thing'); $this->view->assign('flavor', 'yellow'); $this->view->assign('config', ['thing' => ['value' => ['yellow' => 'Okayish']]]); `

  • Packages: Flow FluidAdaptor

BUGFIX: Null coalesce content type in ActionResponse getter

The current PHP typehint of : string will cause this method to throw an error when setContentType() was not called before with a valid string. In Flow 7 we lifted the typehint to ?string, but IMO that does only complicate the API unnecessarily, because '' is not a valid content type any way and hence indistinguishable from “did not set content type” for any useful means and purposes. Hence I suggest using null coalescing instead (and changing the 7+ typehint back to string, though that would be breaking).

See also discussion in https://github.com/neos/flow-development-collection/pull/2180#discussion_r550197400

  • Packages: Flow

BUGFIX: Clarify regex syntax for Uri request pattern

  • Packages: Flow

BUGFIX: ActionResponse contains negotiated media type as content-type

This sets the negotiated media type from the Controller in the ActionResponse if nothing was set in the action.

Follow-up to #2005

  • Packages: Flow

BUGFIX: Add TTL to tags in RedisBackend

Previously the tags did not expire with their key, so they were never removed from Redis. Now the same lifetime as their corresponding entries is added to tags set by the RedisBackend

This is a continuation of #1194. To prevent race conditions when two processes write to the same cache tags at the same time, the list of keys that will be written is `watched <https://redis.io/commands/watch>``_ before and during the transaction. If the key is modified during that time, the transaction ``exec` will fail and the TTL is calculated again (up to 4 retries).

  • Packages: Flow

TASK: Make JsonView datetime format configurable

This allows to override the badly chosen default format of DateTimeInterface::ISO8601 which is not really compatible to ISO8601 in the JsonView options datetimeFormat - see https://www.php.net/manual/en/class.datetimeinterface.php#datetime.constants.iso8601

  • Packages: Flow

TASK: Make ActionResponse::getContentType non-nullable

This removes the nullability of the getContentType() getter on the ActionResponse, which was only added to technically fit the possibility that the value is null without thinking about the API. A content type of empty string is already enough to denote a “not set/unspecified” case and an additional null only makes the API more complex than needed. This change is not technically breaking, even though it changes a return type, since the new return type is more strict. It could be breaking if you check for a null return value only without handling an empty string case. You should use the hasContentType() method before calling the getter.

Follow-up to #2458 <https://github.com/neos/flow-development-collection/issues/2458>``_which is a follow-up to ``#2180

  • Packages: Flow

TASK: Remove generic persistence left-overs

This removes some left-over namespace imports and the signal/slot connection for allObjectsPersisted on the generic persistence.

  • Packages: Flow

TASK: Tweak polyfill replacements

The replacements added according to the symfony/polyfill README (and tweaked recently to actually appear in the split manifest) lead to an installation issue (#9834)

Thus this removes the PHP 5 polyfills (those not being replaced should not be an issue) to fix that. Also, since we require PHP 7.1, the 7.2 polyfill must not be replaced.

  • Packages: Flow Utility.Unicode

TASK: Add test that covers signal arguments by reference passing

These tests verify that our current signal/slot dispatching works with byReference arguments.

  • Related to: #2412

  • Packages: Flow

TASK: Replace deprecated Guzzle functions

  • Resolves: #2383

  • Packages: Flow

TASK: Support header title for table output in console

The Symfony Console Table components supports settings a header title for a table.

So should we :-)

  • Packages: Flow

TASK: Fix unit tests

Fixes the RequestInformationHelperTest that fails since 441b61b4b5b7a9b9340f77ea992c323a40d2f13c

  • Packages: Flow

TASK: JsonView code cleanup

  • Some code cleanup

  • usage of NullCoalescing

  • Hardening the JSON encoding

no further functional changes

  • Packages: Flow

TASK: Persistent caches will have a defaultLifetime of 0

Persistent caches, even non-file backends, should be pretty persistent. This is the way.

  • Related to: #2345

  • Packages: Flow

TASK: Use GH actions for builds

Still WIP, needs to be backported to lowest maintained branch once finished, but I want to get psalm running too and that’s not in <6.0

  • Packages: .github

Detailed log