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

FLOW3 1.0.0 alpha3

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

Release Notes for FLOW3 1.0.0 alpha3

This document contains information about FLOW3 version 1.0.0 alpha3 which was released on August 18th, 2009.


notice - Note

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

News article on

What's New?

The main focus for alpha 3 was clearly the making of a tutorial. FLOW3's feature set therefore pretty much followed what was necessary to get a smooth first-timer's experience while walking through the tutorial. With more than 200 new features, bugfixes and smaller improvements this release is clearly a big leap towards a more stable code base.

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


Again, as an alpha release, FLOW3 1.0.0-alpha3 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

FLOW3 1.0.0 alpha 4 is scheduled for 8th of September 2009. Besides our work on TYPO3 5.0 our main field of interest is speed and stabilizing existing features.

Your Feedback

We want to hear your opinions! 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

FLOW3 1.0.0-alpha3.tgz

FLOW3 1.0.0-alpha3.bz2



Most of the possible breaking changes are internal, caches should be cleared automatically. If you run into strange errors while using an existing database, try with an empty one. Although there were no changes to the internal way of storing data, something might have been broken which now breaks because of a fix...

For user-visible changes see the "Important Changes" part of the ChangeLog below.



Wrote a Getting Started Tutorial covering all the initial steps for getting started with FLOW3.

In Subversion moved the FLOW3 distribution directory below the new "Distributions" directory. The default FLOW3 distribution is now called the "Base Distribution" - r2928


(Cache) The FileBackend now uses a shorter hash for the directory names which relaxes the situation for Windows users with a limited path length. The hash is now rendered from the Web path, SAPI type, process user name and application context. Please manually delete everything the Data/Temporary/ directory to get rid of old caches files - r2953
(Configuration) The configuration manager now sets the FLOW3 setting "core.context" to the current application context. Resolves #4084 - r2953
(Core) FLOW3 now supports a custom name and location for the "Web" directory. The path is detected automatically in Web mode and must be specified in the flow3 shell script (environment variable FLOW3_WEBPATH) to work in command line mode. Resolves #3990 - r2956
(Environment) Create warning log entry if temporary base path is longer than (PHP_MAXPATHLEN - 230). Relates to #3560 - r2898
(Error) The Debug Exception Handler now provides tooltips for argument values which are longer than 100 characters - r2850
(MVC) It is now possible to disable validation temporarily for single controller arguments. This is necessary in situations where a knowingly incomplete / invalid argument needs to be passed to an action, for example an edit action. Validation can be disabled either by calling the disableValidation() method on the argument object or by adding a @dontvalidate $argumentName annotation to an action method. Resolves #4166 - r2989
(MVC) Enable bulk assignment of template variables in AbstractView. Just call $this->view->assignMultiple(array('key1' => 'value1', 'key2' => 'value2')) to set multiple keys at once. Resolves #3997 - r2899
(Object) The object serializer is now able to (de)serialize ArrayObjects - r2857
(Object) Integrated the new session scope feature into the object manager - r2762
(Package) The package manager's command line controller now returns a friendly error message on trying to activate or deactivate an already active or inactive package. Earlier it just threw an unpolished exception - r2989
(Persistence) Implemented an update() method for the base repository which allows for conveniently updating existing objects. update() only expects one argument which must be a clone of the object to replace, already containing the modifications. The object passed to update() must internally contain the same uuid like the object to be updated (ie. replaced). In fact this new update() method is basically a more convenient way to call replace(). Resolves #4167 - r2989
(Persistence) The persistence framework (Dirty Monitoring Aspect to be exact) now traces if an entity is a clone of an existing (= reconstituted) entity. This allows for intelligently rendering a hidden identity field in forms by Fluid's Form Viewhelper. Relates to #4170 - r2991
(Property) When mapping properties UUIDs in arrays being mapped to typed array-like targets get converted to objects now. Relates to #3933 - r2984
(Reflection) Class schemata now contain information about requested element types for collection-like properties, use @var type<elementType> annotations. Relates to #3933 - r2836
(Security) Removed the RSA authentication mechanism for now - r2851
(Security) Added a new authentication provider and token that uses account objects for authentication - r2851

(Core) The bootstrap didn't work correctly with symlinked Packages/Framework/ directories, fixed that - r2808
(Core) The session and session object registry are now initialized correctly in the bootstrap - r2762
(Core) Reimplemented the detection of various paths which are later available as FLOW3_PATH_ constants. Now supports any setup with symlinks which makes sense. It's important though that the flow3 script is a real file in the installation and no symlink. FLOW3's root path is now determined by an environment variable. This is optional in web mode but mandatory in CLI mode. The environment variable is set automatically by the flow3 script. Resolves #4082 and relates to #3990 - r2953
(MVC) A @validate annotation placed in an action method's comment replaced existing rules instead of adding them to a common conjunction validator. By this it was possible to override any validation rule with a simple @validate $foo Raw annotation. Fixes #4168 - r2989
(MVC) When calling a controller on an inactive package the user no longer simply get's a 404 but a helpful hint. Fixes #3699 - r2888
(MVC) AbstractView::assign() now returns itself as stated in the comment. This enables method chaining like: $this->view->assign('key1', 'value1')->assign('key2', 'value2'); - r2899
(MVC) The format of a request may now contain any character which allows to specify formats like "rss.xml" or "" instead of just "xml" - r2867
(Monitor) Fixed one more file monitor test that failed on Windows. Relates to #3823 - r2898
(Monitor) Applied a patch by Bastian which fixes some file monitor tests when run on Windows. Fixes #3823 - r2889
(Package) Files in the directory Packages/ are now ignored by the package manager and the package directory scan was optimized for better performance. Resolves #4085 - r2953
(Persistence) when handing objects over to a Repository instance their type is now checked against the type managed by the Repository instance, fixes #3837 - r2877
(Utility) getUnixStylePaths() no longer breaks paths with DOS drive letters, fixes #4091 - r2981

(Object) Added a new method getObjectNameByClassName() to retrieve the object name by a given class name - r2759
(Package) In the class Package renamed getPackageMetaDataPath() and getPackageDocumentationPath() to getMetaPath() and getDocumentationPath() respectively. Now their naming is consistent with the remaining functions in the Package class - r2745
(Package) Removed the getPackagePAth() and getPackageClassesPath()  from the Package Manager because they were redundant. Please use $package->getPackagePath() and $package->getClassesPath() respectively - r2745
(Utility) The Arrays::trimExplode() function now removes empty values from the result by default - r2953

Moved the script to a new location within the FLOW3 package. Also changed the strategy for setting file permissions according to the new tutorial - r2790
Globally replaced occurrences of RuntimeException with more meaningful exceptions - r2763
Renamed the folder for packages which are included in the FLOW3 distribution from "Distribution" to "Framework" - r2799
Renamed the directory "Public" to "Web" and the constant FLOW3_PATH_PUBLIC to FLOW3_PATH_WEB accordingly - r2799
renamed getUUIDByObject() to getIdentifierByObject() and getObjectByUUID() to getObjectByIdentifier(), relates to #3676 - r2832
moved class schema handling from Persistence to Reflection, resolves #3934 - r2835
Renamed the Packages/Global/ directory to Packages/Distribution/ and the Packages/Local/ to Packages/Application/. This shouldn't have any bad side effects and matches the tutorial we're writing for alpha3 - r2789
Added the Party package to the FLOW3 distribution - r2842
Public API is now annotated with @api (instead of using @internal for non-public API), resolves #3883 - r2794
Improved and refactored the bootstrap script (index.php) - r2799
The flow3 shell script now refers to Framework instead of Distribution - r2807
(Cache) FileBackend now stores the result of $this->environment->getMaximumPathLength() to increase performance. Relates to #3560 - r2913
(Configuration) changed line delimters to unix style in Objects.yaml. Andi.....! - r2766
(Core) Lowered the PHP requirement just a bit so that FLOW3 works not only with PHP 5.3.0RC2 but alos 5.3.0RC2-dev - r2847
(Object) Refactored the session registry. Extracted the object (de)serialization into a generic object serializer class - r2839
(Object) Optimized the autowireProperties() method a bit, using more efficient reflection methods - r2781
(Package) synchronized PackageInterface with Package implementation - r2903
(Package) adjusted package manager to use new folder structure (Application instead of Local) - r2797
(Persistence) isDirty() now considers properties on new objects as dirty - r2740
(Reflection) setValue() in a property reflection is now able to set private properties - r2759
(Security) The security framework now uses the new session scope for its session data - r2840
(Validation) The TextValidator was too restrictive because it did not allow line breaks and other common characters - now it does. However, it's not really secure yet. Relates to #3977 - r2885

Changed the policy configuration according to the new syntax - r2851
Now the Production Exception Handler is used (again) in Production context, like it's supposed to - r2846


Wrote a lot of test cases, covering all of the ViewHelpers and some of the core classes. More to come! - r2914
(View) Refactored TemplateView. Now, We're using a clever fallback scheme to resolve Partials and Templates - r2902
(View) Removed obsolete Method assign() from TemplateView as this method already exists in the parent class. The check for the key "view" is not needed anymore since the view is stored in the VariableContainer - r2899
(View) Removed occurences of the PHP 5.3 namespace separator from regular expressions in an attempt to backport TemplateView automatically lateron - r2960
(View) Added a placeholder to TemplateView as a hook point for custom code when backporting - r2968
(ViewHelpers) AbstractFormViewHelper - Now using Persistence\Backend to determine if an object is updated, instead of the DirtyMonitoringInterface - r2968
(ViewHelpers) LayoutViewHelper: Added isset-check to viewHelperArguments in postParseEvent() to avoid PHP notices (mainly to ease creation of unit tests) - r2914
(ViewHelpers) FormViewHelper: Renamed "uuid" to "identifier" to pave the way for backporting - r2914
(ViewHelpers) AbstractFormViewHelper: Renamed method "getObjectValue" to "getPropertyValue". Moved method "addErrorStyleClass" from TextBoxViewHelper up to AbstractFormViewHelper and renamed it to "setErrorClassAttribute". Some cleanups and performance tweaks - r2914

renamed getUUIDByObject() to getIdentifierByObject() and getObjectByUUID() to getObjectByIdentifier(), relates to #3676 - r2832

(Core) Added some safe guard and aception to the Abstract Node which would exit with a fatal error in some cases - r2885
(Core) ViewHelpers are not anymore instanciated multiple times for one tag in the template. Now, you can store values inside a ViewHelper, f.e. to see how often it has been rendered. Fixes #3994 - r2895
(View) Improved error message in case no layout/partial was found. Resolves #4204 - r2995
(ViewHelper) SeelctViewHelper now handles collections of objects passed as options as expected virtually always, fixes #3676 - r2832
(ViewHelpers) SelectViewHelper: "options" argument is no longer optional. Fixes #4027 - r2914
(ViewHelpers) Added an additional check for rendering the hidden identity field: the hidden field is only rendered for "new" objects if they are in fact a clone of an existing object. Resolves #4170 - r2991
(ViewHelpers) Email Uri ViewHelper no longer creates a link tag. This resolves #4028 - r2914
(ViewHelpers) Fixed a failing test of the For view helper introduced in the last commit - r2883

(Core) Added "not equal" Comparator. Now you can use booleanArgument="{foo} != {bar}" in your template - r2914
(View) In case you used Partials until now, the Syntax changed! Partials are not allowed to have / in front anymore - r2902
(ViewHelpers) Added attributes "disabled" to all visual FormViewHelpers - r2914
(ViewHelpers) Added attribute "disabled" to all visual FormViewHelpers - r2914
(ViewHelpers) Implemented the ifAccess view helper, that renders its content based on the configured FLOW3 policy. Resolves #3622 - r2935
(ViewHelpers) AbstractFormViewHelper: Added attribute "errorClass" to form view helpers "Select", "Textarea" and "Upload". They all are able to visualize validation errors now - r2914
(ViewHelpers) ForViewHelper: Added more fine-granular support for objects implementing \Traversable. If the given array contains no keys or is an object that does not implement the \Iterator interface, the key will contain the numerical index, just like in PHPs foreach - r2914

(View) While resolving the path and file name of a template, Fluid now takes the request's format into account. By default it is ".html" and now others, like ".xml" or even ".rss.xml" are possible - r2867
(ViewHelper) The Action View Helper and the URI Builder now support rendering of absolute URIs. This comes in handy if you need an URI pointing to your feed or the like. Absolute URIs can be generated by specifying the "absolute" property: <f:link.action action="index" controller="Post" absolute="TRUE" /> - r2868


Updated the Controller and Entity Template to match the current guidelines for class comments - r2940

The KickstartController::generateControllerAction now optionally accepts a comma separated list of controller names for generating multiple controllers at once. With that you can generate controllers Bar and Baz of package Foo with one call to the flow3 script: ./flow3 kickstart controller Foo Bar,Baz - r2940

Fixed the path name shown during the kickstart of a package, controller etc. - one character was cut off from the beginning - r3005


Added a basic account model - r2851


(Admin) Fixed JS and CSS inclusion when using in a subfolder of the document root, fixes #3890 - r2843
(FLOW3 Persistence) Even dependencies which are not properly tagged with @transient annotations are now reinjected. Previously the DataMapper would set those properties to NULL. Resolves #3889 - r2781
(FLOW3 Persistence) (Nested) arrays containing objects are now stored correctly, even if the leafs are objects. Fixes #3835 - r2741
(FLOW3 Persistence) Added a safeguard for getUUIDByObject() which checks the parameter for validity. Relates to #3835 - r2739
(FLOW3 Persistence) Cyclic object references can now be stored even if the involved objects are not aggregate roots, fixes #3859 - r2779

(FLOW3 Persistence) aggregate root entities in the object graph are now persisted even if they have not been added to their very own repository, resolves #3858 - r2880
(FLOW3 Persistence) implemented ordering of queries, resolves #3955 - r2848
(FLOW3 Persistence) setLimit() and setOffset() work now as expected. Relates to #3955, relates to #3955 - r2845

(FLOW3 Persistence) renamed hasUUID() to hasIdentifier() to by in sync with other method names - r2871
(FLOW3 Persistence) addded getObjectByIdentifier() to the FLOW3 persistence backend, resolves #3336 - r2871
(Persistence) renamed getUUIDByObject() to getIdentifierByObject() and getObjectByUUID() to getObjectByIdentifier(), relates to #3676 - r2833


Inactive packages are no longer included in tests, fixes #3822 - r2886

made sure static attributes are not backed up by PHPUnit, relates to #3854 - r2753
Adjusted the TestRunnerCommandLine to work with the most recent PHPUnit version. PHPUnit_Util_Log_XML was renamed to PHPUnit_Util_Log_JUnit - r2952

Past Release Notes

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