All page names need to be in English.
en da  de  fr  it  ja  km  nl  ru  zh

FLOW3 1.0.0 alpha7

From TYPO3Wiki
Jump to: navigation, search
This page belongs to the Flow Team (category Flow)

Release Notes for FLOW3 1.0.0 alpha7

This document contains information about FLOW3 version 1.0.0 alpha 7 which was released on January 19th, 2010.


notice - Note

As an alpha release, FLOW3 1.0.0 alpha 7 is naturally not recommended for production use

Article on

What's New?

For a full list of new features and improvements please see our Changelog below.


Again, as an alpha release, FLOW3 1.0.0 alpha 7 is naturally not recommended for production use. Be warned: It's a bit slow, eats more memory than is perhaps healthy and has not yet undergone a full security review. However these issues will be addressed in the upcoming alpha releases and we're confident that FLOW3 1.0.0 final will be a rock solid framework which performs well in production environments.

Next Release

The focus for the next release is on important features for the security framework and speed / stability improvements for persistence. FLOW3 1.0.0 alpha 8 is scheduled for 1st of March 2010.

Your Feedback

We want to hear your opinion! What's your experience with this release? What went well, what didn't? What features are you missing? Join our discussions in the mailing list, IRC channel and twitter ... Check out for ways to get involved and get in touch. Get into the FLOW3! - Your FLOW3 Core Team


MD5 checksums

MD5 (FLOW3-1.0.0-alpha7.bz2) = 367eb420775a3db48fee6f2425aff59a
MD5 (FLOW3-1.0.0-alpha7.tgz) = ee4c41320afdde9020d5ba9cf64f451f
MD5 ( = 48cb8b13a807c6c213120deadf6a2dcf


We again took the freedom of renaming a few classes and rewrote the persistence layer storage backend. So if you have been using FLOW3, you need to adjust your code and migrate your data.

Fear not, it is as easy as running two commands:

./flow3 migrate classnames
./flow3 migrate persistence

"migrate classnames" adjusts class names in your code to the new class names and "migrate persistence" converts Data/Persistent/TYPO3CR.db to Data/Persistent/Objects.db.

In case you have configured your FLOW3 to use a different database setup, you need to adjust the file Packages/Framework/FLOW3/Script/migratepersistence.php. Just look at the beginning of the file and adjust the configuration array.


  Changes that require end-user code adjustments

* A lot of class names were changed, use the migrate classnames command to adjust your code
* The default persistence backend has changed, use the migrate persistence command to transfer your data
* If you had a customized FLOW3.yaml file, you must merge this into Settings.yaml
* Added encryptionKey to security configuration, you must change this to something unique!
* If you configured FLOW3 to use the APCBackend for caching, change the name to ApcBackend
* Removed the Configuration Manager's getSettings() method! Use getConfiguration() instead, but be aware that this is not an official API method.


(MVC) Refactored the Controller Context and how its being built in the Abstract Controller and Action Controller. The controllers now provide a method getControllerContext() which can potentially be used as a factory method for injecting a controller's current context into other objects (such as a TypoScript view) - r3441
(MVC) setRequestURI(), getRequestURI(), setBaseURI() and getBaseURI() were renamed to *Uri() in Request - r3449
(MVC) redirectToURI() was renamed to redirectToUri() in AbstractController - r3449
(Persistence) added three more methods to the public API of the Manager - r3618
(Persistence) The QueryInterface now has a count() method for low-overhead counting of objects. Resolves #5149 - r3532
(Persistence) Added new backend classes that can be used for further backends - r3616
(Persistence) Removed methods getIdentifierByObject(), getObjectByIdentifier() and isNewObject() to ManagerInterface and Manager - r3616
(Persistence) Removed methods getIdentifierByObject(), getObjectByIdentifier() and isNewObject() from BackendInterface - r3616
(Persistence) Removed withUUID() from QueryInterface, use getObjectByIdentifier() on Manager instead - r3616
(Persistence) Added constants for query operators to QueryInterface - r3616
(Property) DataType\URI was renamed to DataType\Uri - r3449
(Property) Renamed the property mapper class to "PropertyMapper" (was just "Mapper" before). Relates to #5658 - r3536
(AOP) Added the JoinPoint class to the supported API. Also added a new method "hasException()" to the JoinPoint implementation. Resolves #5480 - r3487
(Configuration) Removed the Configuration Manager's getSettings() method! If you relied on this method please use getConfiguration() instead, but be aware that this is not an official API method. The recommended way to retrieve settings are injectSettings() methods (see manual for more information). Relates to #5577 - r3526
(Log) setLogFileURL() was renamed to setLogFileUrl() in FileBackend - r3449
(Security) Removed getSecurityContext() from the Authentication Manager Interface – it was not used anywhere - r3487
(Utility) getRequestURI() was renamed to getRequestUri() in Environment - r3449

(Security) Added encryptionKey to security configuration, you must change this to something unique! - r3502
(Security) Removed the requestPatterns configuration from the default security configuration. This configuration was only an example and got in the way if one wanted to reuse the DefaultProvider configuration for other login controllers - r3487
(Security) the HashService now needs an encryptionKey to be set in it's settings - r3500
(Resource) Changed the names of settings for the Resource module. Please refer to the updated Settings.yaml for the new options - r3548

Implemented a migration script to convert usage of class names to those used in 1.0.0 alpha 7. Just run ./flow3 migrate classnames and the script will update PHP, XML and YAML files of all installed packages - r3646
(MVC) If the result of an action method is an object providing a __toString() method, this method will be called by the ActionController and its result will be added to the response content. Resolves #5995 - r3606
(MVC) Implemented support for file uploads. Uploading files is cooperation between the Web Request Builder, the Property Mapper and the Resource sub package. The solution included in this commit provides handling of incoming files (including nested arguments) and transparent conversion into Resource objects. Resources (files) are only stored once, no matter how often they are uploaded or what original filename they carried. Still missing: view helper, documentation and automatic purging of unused resource files. Addresses #342 - r3536
(MVC) Added an additional log message to the Router's resolve() method so that links which don't match a route can be debugged more easily - r3634
(MVC) The routes property @controller now allows the use of namespace separators for referring to classes in file / class structure below "Controllers". Resolves #5998 - r3606
(MVC) For now removed the request hash feature (HMAC) because it mocks a level of security for incoming data which it doesn't provide. The current mechanism effectively puts control over content security into Fluid templates and it doesn't belong there. Although there might be a need for a request hash, the content security must be implemented by other means. Relates to #4960 and relates to #5659 - r3536
(Reflection) Added a new method isMethodTaggedWith() to the Reflection Service - r3548
(Distribution) Implemented a migration script to convert data stored in the TYPO3CR into the format used by the new persistence backend used in 1.0.0 alpha 7. Just run ./flow3 migrate persistence and the script will migrate data from TYPO3CR.db to Objects.db - r3649
(Configuration) The configuration cache (usually only used in Production context) is now cleared automatically if the FLOW3 Bootstrap revision changes - r3518
(Core) now checks the path upwards for accessibility by the webserver user, resolves #4445 - r3456
(Persistence) Wrote a new persistence backend using a database directly instead of TYPO3CR. Details see below. Resolves #6006 - r3616
(Property) The Property Mapper now supports a mechanism called Object Converters. These convertes enable the mapper to convert strings, arrays or numbers to certain objects, for example a unix time stamp to a DateTime object. Resolves #5660 - r3536
(Reflection) Implemented the methods "isPropertySettable" and "isPropertyGettable" for the ObjectAccess class - r3536
(Resource) Completely reworked the resource management module. It now supports persistent resources, file uploads and provides a more flexible publishing mechanism. Resolves #5822 - r3548
(Resource) Implemented a ResourceObjectConverter which is capable of converting arrays or strings to Resource objects - r3536
(Resource) Implemented an Object Converter for resources which can handle file uploads - r3548
(Security) Implemented a logging aspect which currently logs all relevant actions of the authentication mechanism. The advices are currently active regardless of the configured logging threshold. Addresses #5481 - r3487
(Utility) Added support for the _FILES super global to the Environment class. The array of information about uploaded files can be obtained in a much cleaner way than PHP provides it by the new getUploadedFiles() method - r3536
(Utility) Files::readDirectoriesRecursively now optionally returns the real path of all files found - r3642
(Utility) Implemented a setValueByPath() method for the Array utilities class - r3536

(Distribution) The Kickstart package was referenced twice in the svn:externals of the FLOW3 base distribution. Resolves #5889 - r3613
(Resource) The FileSystemPublishingTarget caused a fatal exception when FLOW3 was run in CLI mode - fixed that - r3551
(AOP) The built proxy classes now retain vital method annotations, fixes #5484 - r3500
(AOP) Added safeguard against missing class and method name in new method, relates to #5484 - r3504
(Configuration) Fixed build of the caches configuration array. Resolves #5576 - r3526
(Core) Fixed the controller class names in the flow3 bash script. Resolves #6059 and resolves #6047 - r3654
(Documentation) Corrected some minor errors in the manual, fixes #5599 - r3656
(MVC) RouterCachingAspect now converts objects to hashes recursively, fixes #5153 - r3513
(MVC) Removed some strtolower() calls in Router to enable consistently cased template folders. Fixes #6030 - r3633
(Persistence) DataMapper now typecasts values to the intended type when mapping properties. Fixes #6028 - r3633
(Persistence) DateTime properties being NULL can be persisted now. Fixes #6029 - r3633
(Persistence) PdoBackend can now handle NULL in properties declared as SplObjectStorage, fixes #6069. Applied the same fix for array processing - r3653
(Reflection) Fixed a bug that would occur if an array with a non-existing key would be passed to ObjectAccess::getProperty(), fixes #6073 - r3658
(Resource): Fixed a bug which resulted in resources which were imported by importResource() to not be published by the FileSystemPublishingTarget. Fixes #6092 - r3682

Replaced occurrences of "[fF]ileName" with "[fF]ilename" - r3548
Moved towards more consistent class, function and variable naming: changed uppercase acronyms to studlyCaps or StudlyCaps as needed - r3449
Implemented additional rewrite rules in the .htaccess file to support the new static resources publish mechanism - r3548
(Configuration) Merged the FLOW3 settings into the generic Settings.yaml file, dropping support for the FLOW3.yaml files. This means that you need to move all your custom settings from your own FLOW3.yaml files to Settings.yaml. Note that in FLOW3.yaml files no "FLOW3:" key on the first level was necessary which now becomes mandatory in the Settings.yaml file. Resolves #5579 - r3518
(MVC) Fixed the resource links in the NotFoundView (they still pointed to "Resources/Packages/") - r3556
(Cache) Renamed APCBackend to ApcBackend, some other changes and optimizations - r3528
(Cache) Implemented a PDO-based cache backend, resolves #5446 - r3528
(Cache) Defined a new "magic" tag for the cache frontends: TAG_PACKAGE can now be used wherever cache entries should be flushed if any package is activated or deactivated. Relates to #5774 - r3548
(Cache) Set the log level of flushCachesByTag to DEBUG - r3487
(Configuration) Cleaned up and refactored the Configuration Manager's loadConfiguration() method. Resolves #5577 - r3526
(Documentation) Updated the Coding Guidelines: removed inconsistent exceptions from the general class naming rules. Also added the rule that names of aspect classes must end with "Aspect". Relates to #5658 - r3643
(Documentation) Documented the new Resource module - r3548
(Environment) Renamed getRawGETArguments() and getRawPOSTArguments() to getRawGetArguments() and getRawPostArguments() - r3529
(Property) The Mapper now throws different exceptions if no ore more than one object were found for given identity properties. Fixes #5171 - r3531
(Resource) Renamed the StreamWrapper class to StreamWrapperAdapter - r3536
(Resource) Renamed a few classes in FLOW3/Resource/: "Manager" -> "ResourceManager", "Publisher" -> "ResourcePublisher". Relates to #5658 - r3548
(Utility) Renamed Files::mimeTypeFromFilename() and Files::mediaTypeFromFilename() to Files::getMimeTypeFromFilename() and Files::getMediaTypeFromFilename() respectively - r3548
(Distribution) Removed the global Resources folder (again) from the FLOW3 distribution - r3535
(Persistence): Changed SQL casts to work with MySQL and PostgreSQL.


(ViewHelpers)  Implemented a Textfield view helper which replaces the TextboxViewhelper. The Texfield also supports the HTML 5 attributes "placeholder" and "required" and will, in the future, support validation - r3628
(ViewHelpers) Implemented an IfAuthenticated view helper which allows for checking if _any_ user is currently logged int - r3628
(ViewHelper) The Resource view helper now supports Resource objects: Like before you can provide a path and package key pointing to a static package resource or you pass it a resource object. Relates to #5822 - r3548
(ViewHelpers) Now select view helpers can sort options by label if "sortByOptionLabel" attribute is true. Thanks to Markus Dreyer! This resolves #4968 - r3514

(ViewHelpers) The ActionViewhelper now produces only absolute URIs. The argument "absolute" is now obsolete - r3548
(ViewHelpers) The TextboxViewhelper is now deprecated and will be removed on the second release after alpha 7 - r3628

Moved towards more consistent class, function and variable naming: changed uppercase acronyms to studlyCaps or StudlyCaps as needed - r3449
Fixed the exception hierarchy - \F3\Fluid\Exception is now the most generic exception. Also added generic exceptions for Core and View - r3431
Removed injectTemplateParser() from TemplateViewInterface (that's infrastructure and should not be in an interface). Some markup fixes to the DocBook sources - r3473
(View) TemplateView::expandGenericPathPattern() now uses the proper API functions of the Request object to determine package keys and controller name instead trying to parse them from the controller object name. Relates to #5998 - r3612
(ViewHelper) Defined additional reserved keywords "on", "off", "yes" and "no" in the TemplateVariableContainer - r3548

(Core) Added safeguard in ObjectAccessorNode::evaluate which checks for object or array before passing a variable to ObjectAccess::getPropertyPath(). Resolves #6003 - r3612
(Core) Made the ObjectAccessorPostProcessor work again, which I have removed accidentally in r3333 - r3461
(Core) Now, the inline notation also works if spaces are before and after ->. This makes it a lot more error-tolerant - r3438
(View) Fixed the TemplateView::parseTemplate() method which now throws an exception like the test assumes - r3464
(ViewHelpers) Fixed the Select view helper to always create at least one option element. This fixes #5020 - r3512


Moved towards more consistent class, function and variable naming: changed uppercase acronyms to studlyCaps or StudlyCaps as needed - r3449


Updated the view helpers to match the new Resource framework. Relates to #5822 - r3548


Renamed many classes and interfaces in order to be consistent with FLOW3's naming rules. A migration script to update third-party applications will follow soon. Resolves #5658 - r3643


Fixed viewhelper shorthand syntax usage in model template, fixes #5833 - r3659
When an invalid package key is used, a proper error message is shown, fixes #4847 - r3657

Moved towards more consistent class, function and variable naming: changed uppercase acronyms to studlyCaps or StudlyCaps as needed - r3449


BinaryInterface::read() now takes an optional third parameter to limit the number of bytes returned - r3516


Binary::read() now takes an optional third parameter to limit the number of bytes returned - r3517
(FLOW3 Persistence) The Query now has a count() method for low-overhead counting of objects. Relates to #5149 - r3533

Removed the FLOW3 persistence backend and the PDOInterface no loger used - r3614


added a bootstrap that can be used with PHPUnit to run tests standalone (without using our own test runner). Combined with a little symlink magic this can be used with NetBeans PHPUnit integration (see Bootstrap.php for hints) - r3547
the BaseTestCase now has a method loadPdoInterface() that loads an interface matching PHP's PDO class, to easy with mocking in unit tests - r3610


Implemented new design for notice message, resolves #5618 - r3541

Past Release Notes

If you have skipped one version while upgrading to this version, please make sure to read those ReleaseNotes (see list) also.