4.0.0 (2017-01-30)

Overview of merged pull requests

TASK: Add migration for renamed boot steps

Replaces boot step names starting with typo3.flow with the renamed ones starting with neos.flow in all PHP files.

  • Packages: Flow

TASK: Replace TYPO3 with Neos

This replaces further occurrences of “TYPO3” with “Neos”.

Addresses #823

  • Packages: Eel Flow

TASK: Replace TYPO3 with Neos (excluding tests)

Only in the following paths: * Classes/* * Configuration/* * Resources/* * Scripts/*

Especially the tests aren’t migrated yet.

  • Packages: Flow

TASK: Remove TYPO3 occurrences in docs and tests

This change removes some further TYPO3 occurrences and replaces them by Neos.

Relates to #823

  • Packages: Files Flow

BUGFIX: Files::getFileContents broken in PHP 7.1

This change set the offset to 0 (default value in file_get_contents.)

PHP 7.1 changed the behaviour of file_get_contents regarding negative offset (support for negative offsets has been added.)

Without this change the sites Root.fusion is not loaded, so that Files::getFileContents return an empty string. Tested on PHP 7.1.0 and 7.0.12 (worked without this fix).

  • Packages: Files

!!! TASK: Rename [TYPO3][Flow][Security][Authentication]

This change adjusts the path used for the POST argument used for authentication with username and password to the new vendor namespace.

Any application - and especially its Fluid templates and JavaScript - relying on the old path needs to be updated.

This change provides a core migration which carries out these changes.

Resolves #837

  • Packages: Flow

!!! TASK: Remove deprecated ``ResourcePublisher`` and pointer

The old resource management pre Flow 3.0 used the ResourcePublisher as main service to get public URLs to resources and the ResourcePointer to keep track of unique resources. Both became unnecessary and were deprecated with Flow 3.0 and are therefore removed with this major release.

  • Packages: Flow

!!! BUGFIX: Reuse join aliases on same property paths

Previously a query object like

$query->logicalAnd($query->equals(‘related.property’, ‘foo’), $query->equals(‘related.otherProperty’, ‘bar’));

would generate an SQL statement with two joins to the related entity, one for each condition, translating to

“get all objects that have any related entity with a property ‘foo’ and any related entity with otherProperty ‘bar’”.

With this change, it will only generate a single join and reuse the join for multiple conditionals, therefore translating the above query object to the more common

“get all objects that have a related entity with both a property ‘foo’ and otherProperty ‘bar’”

This also improves performance of such queries by avoiding unnecessary joins.

  • Packages: Flow

TASK: Remove deprecated configuration check in ``Dispatcher``

Removes a check for an old configuration value that was deprecated since several versions.

  • Packages: Flow

!!! TASK: Remove deprecated support for relative uri paths

Removed the long-deprecated compat flag for relative uri paths and the according code in the UriBuilder and UriBuilder test.

  • Packages: Flow

TASK: Some namespace fixes

Just two small fixes sponsored by phpstan/phpstan.

  • Packages: FluidAdaptor

BUGFIX: Adapt to standalone section rendering in Fluid

We used our own workaround to render a section directly without rendering the surrounding template. Now that this is implemented in Fluid core we can remove the code, but still need some small adaption code in order to have assigned view variables available in the section when no variables were given to the renderSection method. In the future we should probably deprecate this behaviour and give the necessary variables directly to the method.

  • Packages: FluidAdaptor

BUGFIX: Add missing migrations after package renamings

This adds doctrine migrations for MySQL and Postgresql to adjust foreign key and index names to the renamed package Neos.Flow.

Background: Apparently the renamed indexes/keys were not catered for in neos/flow-development-collection@`3b6d38c1b5aa5ab8a51d3f657a720d0d17ae8700 <https://github.com/neos/flow-development-collection/commit/3b6d38c1b5aa5ab8a51d3f657a720d0d17ae8700>`_

Related: neos/neos-development-collection#1374

  • Packages: Flow

TASK: Simplify EnvironmentConfiguration object instantiation

in the environmental class “Neos\Cache\EnvironmentConfiguration” is a minor bug (PR #810). in the moment the bug is fixed the parameter $maximumPathLength has not to be set if its equal to the php constant PHP_MAXPATHLEN. In this case it can be removed from the constructor call

<!– Thanks for your contribution, we appreciate it!

Please read through our pull request guidelines, there are some interesting things there: https://discuss.neos.io/t/creating-a-pull-request/506

And one more thing... Don’t forget about the tests! –>

  • Packages: Flow

TASK: Change default value for maximumPathLength in EnvironmentConfiguration

As mentioned in the github/neos/cache is the decalaration of the property maximumPathLength with a value and then requiring a value for that property inside the constructor that overwrites the declared value EVERY time a minor bug. So the parameter for the constructor should be changed to an optional with the deault value as set for declaration

<!– Thanks for your contribution, we appreciate it!

Please read through our pull request guidelines, there are some interesting things there: https://discuss.neos.io/t/creating-a-pull-request/506

And one more thing... Don’t forget about the tests! –>

  • Packages: Cache

BUGFIX: Missing $context variable in PdoBackend

This change also cache the context value, to avoid too much call of the md5 functions.

  • Packages: Cache

TASK: Store ``Parser\Configuration`` in rendering context

This allows to fetch the parser configuration after creating a view to configure interceptors.

  • Packages: Eel Flow FluidAdaptor Kickstarter

TASK: Improve styles for exception screen

This changes the CSS styling of exceptions screens to be better readable (less contract).

  • Packages: Flow

BUGFIX: Fix core migration to Flow 4.0

This change, after thorough discussion, fixes the following issues:

  • When somebody specified “flow core:migrate” without arguments, or mis-spells the package-key argument (“flow core:migrate package=foo”), he now gets an error message instead of all packages which are non-core-packages being migrated.
  • We remove one migration which does not apply cleanly; which was part of Flow 3.x. This migration is also not needed anymore; as people are usually upgrading from Flow 3.2/3.3 where this migration was already applied.

This now also fixes the case that if you upgrade a package which was created for Flow 3.3 to 4.0, all old migrations are run – and a fatal error existed at the Fluid migration step.

  • Packages: Flow FluidAdaptor

TASK: Fix code style issues

This change fixes a couple of code style issues which slipped in through prior pull requests.

  • Packages: Cache Unicode

BUGFIX: Fix support for multi-type render arguments

ViewHelper render method arguments with multiple type defintions in the docblock are now correctly registered as mixed type arguments.

Fixes: #748

  • Packages: FluidAdaptor

BUGFIX: Always set package type in newly created packages

This fix makes sure that the package type is always set in composer manifests created via PackageManager::createPackage() in order to prevent newly created packages (i.e. via the Kickstarter) to be ignored from Flows object management.

Fixes: #782

  • Packages: Flow

BUGFIX: Fix IfHasErrorsViewHelper

With the move to TYPO3Fluid the behavior of the AbstractConditionViewHelper has been changed (see #746). This fix adjusts the validation.ifHasErrors ViewHelper accordingly and adds some minor cosmetic fixes. Other condition ViewHelpers have been adjusted already.

Fixes: #747

  • Packages: FluidAdaptor

BUGFIX: Tests shouldn’t leave folder behind

The CacheFactoryTest left a folder behind because it didn’t use the virtual file system because the mocked environment configuration didn’t return the right path.

This change fixes it and prevents the folder being created in the actual filesystem.

  • Packages: Flow

TASK: Use ``refreshConfiguration`` to refresh for compile run

Since the changes to the ConfigurationManager, using flushConfigurationCache leaves an empty configuration behind which is only helpful when you really only want to flush caches.

In case a change was detected refreshConfiguration is more appropriate as it leaves the ConfigurationManager in a usable state afterwards.

  • Packages: Flow

FEATURE: Runtime evaluation of env and constants in Configuration

The configuration is now cached with php expressions that read environment variables and constants at runtime to allow writing the configuration cache on a different environment.

  • Packages: Flow

BUGFIX: ScalarTypeToObjectConverter should not convert entities

This check if the current target type is an entity or a value object and skip the type converter in this case to avoid nasty side effect.

  • Packages: Flow

TASK: Update styling of var_dump and exception messages

This adapts the styling of the \\Neos\\Flow\\var_dump and debug exception handler to match our current CI more. Additionally overhauls the markup of the debug exception handler to a more semantic structure and without inline styles.

  • Packages: Flow

BUGFIX: Invalid namespaces and class references

This change fixe a couple of stale reference to classes which have been moved around recently.

  • Packages: Flow

FEATURE: Make Cache FileBackends independent of external locks

This avoids using external locks, which are prone to platform issues (race conditions and tombstones for lock files or missing semaphore extension) and instead directly uses the file locking mechanism of PHP to lock the cache files.

This should noticeably improve performance for the FileBackend caches and avoid having thousands of Lock files which clobber the file system.

  • Packages: Cache Flow

!!! TASK: Remove deprecated support of temporary path setting

The setting TYPO3.Flow.utility.environment.temporaryDirectoryBase was deprecated and with this change finally removed.

The temporary path defaults to FLOW_PATH_ROOT . ‘Data/Temporary’, but you can always override the temporary path via the environment variable FLOW_PATH_TEMPORARY_BASE instead.

Note that in either case a sub path will be created based on the current application context.

  • Packages: Flow

BUGFIX: Configured scope for interfaces is not overwritten

Currently the behaviour of a Scope annotation on an interface depends on the amount of implementations. If there are multiple implementations for the interface, then the configured interface scope is used all the time. When there is only a single implementation, then that implementation will override the configured interface scope.

This breaks for example in case of the SystemLoggerInterface. This interface is marked singleton but the implementation is not because it is reused for other loggers. The expected result is that the configured scope of the interface is kept.

This change adjusts the behaviour and makes sure the Scope defined in an interface is always respected.

  • Packages: Flow

TASK: Remove deprecated hash getter and setter from Resource

The PersistentResource object retained a couple of getters and setters from 2.x versions of Flow that were deprecated and are now bound for removal.

  • Packages: Flow

TASK: Remove deprecated ``hasMappingErrorOccured`` method

\\Neos\\FluidAdaptor\\ViewHelpers\\Form\\AbstractFormFieldViewHelper has a hasMappingErrorOccured which was replaced with corrected spelling as hasMappingErrorOccurred and is deprecated since quite some time.

The wrongly spelled method is removed by this.

  • Packages: FluidAdaptor

TASK: Remove handling for deprecated ignoreTags format

In earlier versions of Flow the setting Neos.Flow.reflection.ignoredTags allowed for a simple list of tags. Due to merging and unset issues this was changed to a key/value list, with the key being the tag name and values being boolean to indicate ignorance of the tag.

The old format is now no longer taken into account.

  • Packages: Flow

TASK: Remove ``ResourceManager::createResourceFromContent``

The method was deprecated with the rewrite for Flow 3.0 and is now bound for removal.

  • Packages: Flow FluidAdaptor

!!! TASK: Remove deprecated ``PropertyMappingConfigurationBuilder``

The PropertyMappingConfigurationBuilder class was deprecated and is bound to be removed.

It can be fully replaced by calling PropertyMapper::buildPropertyMappingConfiguration from now on.

Usage in tests is replaced in the same manner.

  • Packages: Flow

TASK: Cleanup removed ``PersistenceManagerInterface::initialize``

The method was deprecated and removed from the interface some time ago and now will finally not be called anymore. That also allows removal of the PersistenceManager factory method in Bootstrap.

  • Packages: Flow

TASK: Remove deprecated ``Argument::isValid`` method

The Argument::isValid method has been deprecated since some time and is no longer in use.

It is therefore removed without replacement. Instead check the validation result returned by Argument::getValidationResults for possible errors.

  • Packages: Flow

TASK: Remove deprecated ``Http\Request::createActionRequest``

The static method was deprecated since Flow 2.3 and is due for removal. Instead create an instance of ActionRequest via the new keyword.

  • Packages: Flow

TASK: Remove deprecated media type methods

The media type methods in the HTTP request class have been deprecated since Flow 2.1 and are bound to be removed in this release.

They were replaced by the dedicated MediaTypes utility.

  • Packages: Flow

!!! TASK: Remove deprecated ``getClassTag`` and constants

The CacheManager::getClassTag method was unused since quite some time and became deprecated in previous releases. It is therefore bound for removal in this major version. Additionally the unused tagging constants in the FrontendInterface are removed as they are also no longer needed.

  • Packages: Cache Flow

FEATURE: Scalar to object converter

This introduces a simple type converter which can convert a scalar value (string, integer, float or boolean) into an object by passing that value to the class constructor.

This converter helps developers using Value Objects (not managed by the persistence framework) or other Data Transfer Objects in places where type conversion is supported. One common case is to use Value Object class names as a type hint for arguments in a command line controller method.

  • Packages: Flow

TASK: Add PHP 7.1 to .travis.yml

Now that PHP 7.1 is released, we should make sure we are compatible.

BUGFIX: Adjust RoleTest to renamed vendor

See neos/neos-development-collection#1240

  • Packages: Flow

BUGFIX: Undead core migrations unearthed and renamed

This fixes a problem with old core migrations which were touched accidentally during the Neos vendor namespace change. These migrations shouldn’t have been touched since they are executed before the vendor name change.

Now the old migrations may rest in peace with their old vendor name.

  • Packages: Flow

TASK: Use neos-* as composer package type consistently

Related to neos/neos-development-collection#1241

!!!TASK: Adjust Package API

Adjusts the Package API and classes to the pending breaking changes to interfaces and removes deprecated classes.

TASK: Add support to cache PHP in APC, Memcached, PDO and Redis

This change adds support for caching PHP code in more cache backends.

With this change you can cache Eel expressions and Fluid templates to any supported backend. Flow proxy class can not use this new feature. If you use in-memory caches for your dynamic PHP code, you need to understand that opcache is disabled with those cache backends!

To use this feature you need to enable allow_url_include = On in your php.ini.

!!!TASK: Remove relations to party in ``Account`` and ``Security\Context``

Since 3.0 something like a Party is not attached to the account directly anymore. Fetch your user/party/organization etc. instance on your own using Domain Services or Repositories.

One example is TYPO3\Party\Domain\Service\PartyService.

TASK: Add option to sort packages by extra configuration

Adds a way to configure packages to be loaded before via composer.json besides using require in a backwards compatible way.

The configuration option is documented and additionally package key configuration is clarified.

BUGFIX: Fix regression introduced by test namespace change

In neos/flow-development-collection#722 the namespace was changed but the classes extending it were not adjusted. Cough, cough.

This fixes that.

  • Packages: FluidAdaptor

TASK: Add test case for configuration validation

Add functional test that validates the different configuration-types of the neos-core in different contexts.

The packages where the validated configuration is loaded from are limited to avoid failing of functional tests if the local configuration has errors. Also the list of packages that is used to find schema files is limited:

  • contexts: Development, Production, Testing
  • configurationTypes: = Caches, Objects, Policy, Routes, Settings
  • configurationPackageKeys: TYPO3.Flow, TYPO3.Fluid, TYPO3.Eel, TYPO3.Kickstart
  • schemaPackageKeys: TYPO3.Flow

The supported contexts, configurationTypes, configurationPackageKeys and schemaPackageKeys are defined as class variables to be overwritten in tests-classed derived from this one.

BUGFIX: Use correct namespaces in ViewHelperBaseTestCase

It seems like that during the switch to the Fluid Adaptor, some namespaces in test were not properly adapted

  • Packages: FluidAdaptor

TASK: Require Fluid Adaptor in Flow

Despite the fact that Flow technically doesn’t depend on Fluid anymore we require it as the majority of projects including Neos uses it anyway. Otherwise developers would need to require it themselves in Flow projects.

!!! TASK: Rename object and resource

This renames the class Resource to ResourceObject and renames the namespaces TYPO3\Flow\Object and TYPO3\Flow\Resource to TYPO3\Flow\ObjectManagement and TYPO3\Flow\ResourceManagement respectively.

A Doctrine migration and two core migrations to help with adjusting code are added.

Resolves neos/flow-development-collection#719

!!!TASK: ViewConfiguration use only the settings of highest weighted request filter

Before this the higher weighted requestFilters were merged into the lower-weighted ones which placed the array-properties of the higher weighted filters last in the merged configuration. This made it impossible to add a new path templatePath that would be considered before.

This patch removes the merging of view-configurations entirely since this lead to confusion in the integration because the merging was unexpected.

This is breaking if you have multiple configurations with filters that apply to the same request and expect some option from one of the configurations to still be present despite another configuration having a higher weight.

FEATURE: Parse media types from file content

MediaTypes::getMediaTypeFromFileContent() can be used to return the media type from a given file content.

  • Packages: MediaTypes

!!! TASK: Remove internal properties request and response from RequestHandler

Since the Request and Response instances are supposed to change inside the ComponentChain, it is error-prone to keep a reference to the initial instances inside the RequestHandler. This change removes the class properties $request and $response and instead uses local variables.

This is marked breaking only for the reason that some RequestHandler implementations could exist that still somehow depend on this internal detail. It is not really breaking as those properties were never part of the public api though.

FEATURE: Extend AuthenticationManagerInterface with getter for providers

Adds a new getter method to the AuthenticationManagerInterface, that has to return all provided authentication providers.

TASK: Make sure SessionManagementTest has a stable cookie name

When run in a Neos setup, the test would fail, since that uses Neos_Session.

TASK: Extract caching to separate package

!!!TASK: Extract caching to separate package

Splits off the caching framework into a separate package. All classes and tests have been decoupled and depend only on the independent utilities. Tests have been adapted and run with PHPUnit only.

With the CacheManager, an extended CacheFactory and the (now) deprecated AbstractCacheBackend, remaining in Flow there should be no breaking changes to any public API.

This is marked breaking as it deprecates the @api marked AbstractCacheBackend. Instead cache backends should now extend from the Neos\\Cache\\Backend\\AbstractBackend and adapt to the new constructor.

  • Packages: Cache FluidAdaptor

!!! TASK: Fluid standalone

Replaces TYPO3.Fluid with Neos.FluidAdaptor integrating standalone fluid.

This change brings the following:

  • Standalone Fluid integration (see https://github.com/typo3/fluid)
  • Flow no longer depends on Fluid, the default View is configurable
  • Partials can be called with a package prefix “Vendor.Package:Path/Partial”

Standalone Fluid in general is faster and many of the Flow specific ViewHelpers were rewritten to take advantage of compiling as well to make it even faster.

The change is breaking because:

  • Standalone Fluid is a major rewrite, it might react differently for edge cases
  • Notably escaping now also escapes single quotes.
  • The ViewInterface got a new static createWithOptions(array $options) construct

method, which needs to be implemented by custom view classes to have a defined way to instantiate views.

  • Flow no longer depends on Fluid, which means you might need to require it yourself in your
distribution or package(s)
  • TYPO3\\Fluid\\* classes have moved to Neos\\FluidAdaptor\\* and a lot of classes are gone and instead to be used from the standalone fluid package if needed.
  • Boilerplate code to create Fluid views is slightly different and might need to be adapted in projects.
  • Packages: FluidAdaptor

FEATURE: ``Array.flip()`` Eel helper

With this helper it is possible to flip the keys and values from an array.


FEATURE: Internal TypeConverters

Creating a new TypeConverter can have major side-effects on existing applications. This change allows TypeConverters to have a negative priority in order to mark them “internal”. Internal TypeConverters will be skipped from PropertyMapping by default.

To use them explicitly the PropertyMappingConfiguration can be used:

$configuration = new PropertyMappingConfiguration();
$configuration->setTypeConverter(new SomeInternalTypeConverter());
$this->propertyMapper->convert($source, $targetType, $configuration);

Resolves: #695

TASK: Remove TYPO3.Welcome Subroutes

As a followup to https://github.com/neos/flow-welcome/pull/4 this change removes the routing rules and have them included if the TYPO3.Welcome package is active.

All this to avoud The SubRoute Package “TYPO3.Welcome” referenced in Route “Welcome” is not available. when you start a new installation

Solves neos/flow-development-collection#698

TASK: Routing: Throw exception for optional route parts without default

In order to match/resolve unambiguously for every dynamic optional route part a corresponding default value has to be specified:

``` -

uriPattern: ‘foo/({bar})’ defaults:

‘bar’: ‘without-this-it-wont-work’


With this change an exception is thrown when a route with optional dynamic parts without corresponding defaults is configured.

Resolves: #683

!!! TASK: Remove “fallback” password hashing strategy

This removes the fallback for password hashing strategies.

This is a breaking change for installations that had accounts created with a Flow version lower than 1.1 (and whose passwords were never updated since then). In that case make sure to add the prefix to the corresponding accounts in the accounts table. For the default configuration the corresponding SQL query would be:

` UPDATE typo3_flow_security_account SET credentialssource = CONCAT('bcrypt=>', credentialssource) `


Due to some problems caused by older Flow installations that migrated from 1.0, a fallback mechanism for the password hashing strategies was implemented for password hashes that don’t contain the strategy prefix (i.e. “bcrypt=>”).

As a result the default strategy for HashService::hashPassword() is a different one than for HashService::validatePassword() unless specified explicitly because for the latter the configured fallback strategy would be used rather than the default.

Fixes: #681

!!! TASK: Remove deprecated setting injection

This removes the deprecated injection of settings via the @Flow\Inject annotation.

FEATURE: Allow property mapping of DateTimeImmutables

This extends DateTimeConverter and StringConverter so that they support any class implementing the \DateTimeInterface (including \DateTimeImmutable).

Resolves: #677

FEATURE: Support for protected static compiled methods

With this change static methods annotated @Flow\CompileStatic can now be protected allowing for more concise public APIs.

If the annotated method is private or not static an exception is thrown during compile time in Production context.

As a side-effect this change adds a new API method ReflectionService:: getMethodsAnnotatedWith() that allows for retrieval of all method names of a class that are annotated with a given annotation.

Related: #662

TASK: Turn fq class names to use statements in kickstart templates

Hi there,

This PR is just to make the kickstart code generators more in tune with the usage of fully qualified class names throughout the rest of the codebases of Neos and Flow.

TASK: Improve TranslateViewHelper documentation

Small change for $source parameter documentation. We can set path to the source file but it was not clear if we should use . or / as a directory separator. This change adds information that slash should be used.

FEATURE: Dependency Injection and AOP for final classes

This adds support for proxied final classes.

Previously those were always skipped from proxy building disallowing Dependency Injection. Besides final classes could not be targeted by AOP advices.

With this change, final classes are now also proxied by default. To _disable_ AOP/DI for those the already existing Proxy annotation can be used:


use TYPO3\Flow\Annotations as Flow;

  • @Flow\Proxy(false)


final class SomeClass {

// ...



Marking classes final is an important tool for framework code as it allows to define extension points more explicitly, but until now we had to avoid the final keyword in order to support DI and AOP.

Resolves #496

BUGFIX: Check for existing symlink in createDirectoryRecursively()

The createDirectoryRecursively() method now checks for an existing symlink before trying to create a directory. Before it only checked for an existing directory, sometimes leading to false negatives.

Fixes #647

  • Packages: Files

TASK: Update standard view

Hi there,

the fallback MVC view contained three invalid links and a couple of TYPO3 labels and css class names, that are replaced with this PR. Not sure about the wording though, so please have a look if it’s okay :)

(BTW: Just for completeness, I applied the same to the LockHoldingStackPage.html)

FEATURE: Support allowable tags in ``stripTags`` Eel String helper

Now the stripTags string eel helper will accept a second optional argument in form of a list of allowed tags which will not be stripped from the string.

BUGFIX: Wrong indentation in policy examples

The indentation of the examples are wrong. They cause an exception if they are copied without the knowledge of the right indentation.

  • Packages: ObjectHandling

FEATURE: Add String.pregSplit Eel helper

Adds a new helper method to the string helper for splitting strings with a PREG pattern.



String.pregSplit(“foo bar baz”, “/\s+/”) == [‘foo’, ‘bar’, ‘baz’] ```

TASK: Cleanup absolute namespaces in property mapper

Preparations for easier namespace migration.

!!!TASK: Remove deprecated ``redirectToReferringRequest``

The ActionController::redirectToReferringRequest method was deprecated in 3.0 and therefore removed for 4.0.

BUGFIX: Fix version constraints/numbers from merge accident

A merge into master that was done with too little cleanup changed the branch and version numbers in a few places where they should have been left unchanged.

Also some changelog files were added that are not supposed to be in master.