AGAVI RELEASE NOTES =================== Version 1.0 - October ??, 2008 ============================== The following is a brief summary of the most important changes in this release. For a full list of new features, changes and bugfixes, please refer to the CHANGELOG. Also, please pay special attention to the list of deprecated elements at the end of this description. ATTENTION: Some bugfixes caused changes to internal behavior. Make absolutely sure that your application is ready for an upgrade to 1.0 by reading the UPGRADING document. Configuration ------------- A new configuration subsystem that natively deals with XML files replaces the current implementation. This has numerous advantages; for instance, Agavi now supports any number of XML Schema (including XML Schema Instance declarations), RELAX NG or Schematron files to be validated against config files or merged result documents in several different stages, can apply XSL transformations (including those declared in PIs) and has extended namespaces support that allow backwards-compatibility to old config files in future versions. Backwards compabibility requires PHP's XSL extension enabled; other than that, everything still works as usual. Old-style configuration file handlers are still supported (but deprecated), but don't support the new features explained above. Also, the namespaces of configuration files have been changed, with envelope namespaces ( and other elements) decoupled from the actual config content namespaces. Again, backwards compatibility is maintained, but you should upgrade your configuration files when moving to 1.0 in order to be able to fully leverage all features and make future transitions easier. Of note, the legacy support for configuration files with no namespace at all (just ) has been dropped completely, so your files at the very least have to be in the global 0.11 namespace (http://agavi.org/agavi/1.0/config). Project development environment ------------------------------- Agavi 1.0 introduces a new environment for creating and managing Agavi-based projects. This environment effectively replaces the older agavi script and Phing build environment. The new environment is also based on Phing. It adds a few useful features: - Skeleton projects may be created - Targets are included for creating views and other project elements - Project-specific build.xml files are now recognized and targets are automatically imported - Build files may define objects that act as event listeners for targets, tasks, or build messages Execution --------- Execution containers now have their own request method. By default, it is equal to the global request's request method. It can, however, be changed using the last (and new) argument of AgaviController::createExecutionContainer() and the related methods in AgaviExecutionContainer and AgaviView. Like the output type, the request method is carried over from the "parent" container if AgaviExecutionContainer::createExecutionContainer() is used (or the methods in AgaviView, which use this method). You can define a slot's request method using the new "method" attribute of the element in your output_types.xml layout declarations. When Agavi does an internal forward, for example to the login "system action" when an action requires authentication, the corresponding information in the "org.agavi.controller.forwards.*" namespaces will now be set on as attributes on the respective containers, in addition to the existing request attributes, which remain for BC. Security -------- The check against isSecure() is now performed in the Security Filter, which always runs unconditionally when core.use_security is enabled. This is a bug fix that was made because it would otherwise be impossible to make certain changes to Agavi's authentication model. Validation ---------- Validators are not handed a "method" parameter anymore with the request method they should run for. This was extremely redundant since the validators weren't even registered if the request method was "wrong". For manual registering, registerReadValidators(), registerWriteValidators() etc are always used in actions anyway, so no problem here, either. As a result, AgaviValidator::validatesInMethod() is gone, too. Deprecated elements ------------------- - The "core.use_routing" configuration directive is now deprecated. Instead, please use in factories.xml's element to control the use of routing on a per-context basis (this is a new feature). Existing "core.use_routing" directives will be used as a fallback until the directive is removed completely in Agavi 1.1 - AgaviSecureWebRequest has been deprecated. There is no replacement available. It will be removed in Agavi 1.1, but of course, you can continue to use the implementation from an older release. - AgaviAdodbDatabase has been deprecated. There is no replacement available. It will be removed in Agavi 1.1, but of course, you can continue to use the implementation from an older release. - Validation severity "none" is now called "silent". Version 0.11.2 - July 8, 2008 ============================= This maintenance release fixes a number of bugs, comes with several changes to improve consistency, and also features a couple of new features. Some of these include: - AgaviStringValidator can now trim an input string. - AgaviDoctrineDatabase has been improved. - elements in settings.xml can now be arrays by using s. - Data returned from a View is now available through $inner in the first template. - File locking is now used anywhere files are being written (config compilation, caching). - AgaviValidationManager::hasError() behavior was fixed to be consistent with getError(). - Incorrect namespace for disabled module forwarding information got fixed (was: org.agavi.controller.forwards.disabled, now: org.agavi.controller.forwards.module_disabled). As always, the CHANGELOG has a comprehensive list of changes. Version 0.11.1 - May 9, 2008 ============================ This is a bugfix release. The most important changes are: - Form Population Filter now correctly casts boolean values to '0', not to an empty string. This change is only relevant during programmatical population and was done to be able to distinguish from null values (consider a