* Updated ChangeLog
[Packages/TYPO3.CMS.git] / typo3 / sysext / extbase / ChangeLog.txt
1 ChangeLog for Extbase
2 =====================
3
4 Changes for 1.3.0 Beta 1
5 ========================
6
7 Extbase 1.3.0 Beta 1 has a lot new and greatly improved features, and also many bugfixes.
8 The highlights are outlined below, and explained in-depth a little further down:
9
10 * Dependency Injection
11 * Dispatcher Refactoring & Completely re-done Configuration Manager
12 This means that Tx_Extbase_Dispatcher is now DEPRECATED!
13 Additionally, if you defined the TypoScript setup for a plugin by hand (which you should not),
14 the syntax has changed a bit there. See below for details.
15 * QueryResult refactoring (needed for Fluid Widgets)
16 THIS COULD BE A BREAKING CHANGE FOR YOU! See below for details.
17
18 Additionally, the following smaller features were implemented:
19
20 * Configurable plugin namespaces (#8365)
21 * Automatic target page determination (#9121)
22 * Improved resolveView() mechanism
23 * Allowing plugins to be registered as new content element (#10666)
24 This is done using an additional parameter to Tx_Extbase_Utility_Extension::configurePlugin
25 that allows you to specify the plugin type. Example:
26 Tx_Extbase_Utility_Extension::configurePlugin(
27 $_EXTKEY,
28 'BlogList',
29 array('Blog' => 'index'),
30 array(),
31 Tx_Extbase_Utility_Extension::TYPE_CONTENT_ELEMENT
32 );
33 * Query Ordering .....
34
35
36 Breaking Changes:
37
38 * The UriBuilder now uses the current cObject instead of creating a new instance in the constructor. This is a breaking change if you instantiated the UriBuilder in your code. Please use the Extbase ObjectManager or inject the ConfigurationManager manually.
39 * fixed typo in getter and setter of Tx_Extbase_Domain_Model_FrontendUser::lastlogin
40 * Flashmessages now share a scope throughout the extension. Before, every plugin had it's own scope leading to the messages only being output when entering the same plugin again (e.g. redirecting from one plugin to another would never display the messages)
41
42 Known issues:
43
44 * The Unit Tests do not fully work again, we will fix that in the next days.
45 * Backend support!
46
47 Dependency Injection
48 --------------------
49
50 Instead of creating objects through t3lib_div::makeInstance, and connecting them together manually,
51 you yan now use Dependency Injection (DI) for that. Let's give an example: If my class "Tx_Foo_Controller_MyController"
52 needs another class "Tx_Foo_Service_LoggingService", it can get an instance of the logging service
53 by Dependency Injection, by specifying the following code:
54
55 class Tx_Foo_Controller_MyController {
56 protected $loggingService;
57
58 /**
59 * @param Tx_Foo_Service_LoggingService $loggingService
60 */
61 public function injectLoggingService(Tx_Foo_Service_LoggingService $loggingService) {
62 $this->loggingService = $loggingService;
63 }
64 }
65
66 The DI container finds that the class "MyController" has an method whose name starts with "inject",
67 and thus passes the logging service to MyController.
68 It is important that you can *only retrieve Singletons* through the inject annotations. If you need
69 to instanciate a prototype object, it is important to *not* use t3lib_div::makeInstance() anymore
70 (as it bypasses the DI container), but instead you need to inject the ObjectManager, and ask it
71 to create your prototype object using the create() method. Example:
72
73 class Tx_Foo_Controller_MyController {
74 protected $logFile;
75
76 /**
77 * @param Tx_Extbase_Object_ObjectManagerInterface $objectManager
78 */
79 public function injectObjectManager(Tx_Extbase_Object_ObjectManagerInterface $objectManager) {
80 $this->logFile = $objectManager->create('Tx_Foo_Domain_Model_LogFile');
81 }
82 }
83
84 In the above example, you have seen that we reference not the concrete implementation *ObjectManager*,
85 but instead the *ObjectManagerInterface*. If a name ends with "...Interface", Extbase DI automatically
86 strips away the "Interface" from the name, and expects to find a concrete implementation of that interface.
87 This is generally a very good practice: For your core classes, you should always reference an *interface*,
88 and let the DI container instanciate the concrete class.
89
90 Additionally, Extbase DI allows to *replace* certain implementation classes by other classes through
91 configuration in TypoScript. Let's give an example, and then you can see the concept:
92
93 config.tx_extbase.objects {
94 Tx_Extbase_Persistence_Storage_BackendInterface {
95 className = Tx_Extbase_Persistence_Storage_Typo3DbBackend
96 }
97 }
98
99 This essentially means to the DI container: "At all places where you encounter a "BackendInterface", you should instanciate
100 the "Typo3DbBackend" class."
101
102 However, note that this setting can only be configured *globally* right now, it is not possible
103 to override that on a per-extension basis.
104
105 Generally, the Extbase DI container provides a subset of the functionality of FLOW3's dependency injection.
106
107 Dispatcher Refactoring & Completely re-done Configuration Manager
108 -----------------------------------------------------------------
109
110 In the last versions of Extbase, the Dispatcher (Tx_Extbase_Dispatcher) was the main entry point to Extbase.
111 However, as we did not have Dependency Injection at that point, it became really complex and did lots of things
112 which it should not do in the first place. That's why we greatly improved that part. Now, any Extbase extension
113 is invoked using the Tx_Extbase_Core_Bootstrap. Additionally, the TypoScript used for the registration of any
114 Extbase extension has been cleaned up and adjusted:
115
116 lib.foo = USER
117 lib.foo {
118 userFunc = tx_extbase_core_bootstrap->run
119 extensionName = YourExtension
120 pluginName = YourPlugin
121 }
122
123 Additionally, you can also override the list of Switchable Controller Actions through TypoScript:
124
125 lib.foo = USER
126 lib.foo {
127 userFunc = tx_extbase_core_bootstrap->run
128 extensionName = YourExtension
129 pluginName = YourPlugin
130 switchableControllerActions {
131 Standard {
132 1 = action2
133 2 = action3
134 }
135 }
136 }
137
138 Of course, you cannot call actions which were not defined previously in the plugin; so the Switchable
139 Controller Actions in TypoScript can be only used to shrink the number of actions available.
140
141 NOTE: If you manually defined the above snippet, notice that there is a NON-BACKWARDS-COMPATIBLE change
142 in there. But you did that at your own risk, as that was never public API ;)
143
144 If you used Tx_Extbase_Dispatcher before in your own code, it should still work, but it is deprecated.
145 Instead, instead
146
147 OLD: Tx_Extbase_Dispatcher::getConfigurationManager()
148 NEW: inject Tx_Extbase_Configuration_ConfigurationManagerInterface into your class
149
150 OLD: Tx_Extbase_Dispatcher::getPersistenceManager()
151 NEW: inject Tx_Extbase_Persistence_ManagerInterface into your class
152
153 OLD: Tx_Extbase_Dispatcher::getExtbaseFrameworkConfiguration()
154 NEW: inject Tx_Extbase_Configuration_ConfigurationManagerInterface into your class,
155 and call $configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
156 on the ConfigurationManager.
157
158 Please note that the Configuration Manager is STILL NO PUBLIC API, and its method signature has also changed.
159
160 QueryResult refactoring (needed for Fluid Widgets)
161 --------------------------------------------------
162
163 Before this change, a call of $query->execute() inside a repository immediately executed the query and
164 returned the result as array.
165 Now, queries are executed lazily at the first moment where you really need them. This means that $query->execute()
166 returns an object of type Tx_Extbase_Persistence_QueryResultInterface, which behaves like an array, meaning you
167 can use foreach() to loop over the query result.
168 However, due to an inconsistency of PHP, the array_* methods, and the iteration methods like current(),
169 next(), ... do NOT work on objects which implement ArrayAccess -- that's the reason why the QueryResult
170 refactoring is a breaking change.
171
172 Now, however, the following is possible:
173 * Return the first query result: $query->execute()->getFirst()
174 * Get the underlying query: $query->execute()->getQuery()
175 * Convert the result to array: $query->execute()->toArray()
176
177 This change is a prerequisite for Fluid Widgets to work. See the Fluid ChangeLog for details.
178
179 Full Changes:
180 -------------
181
182 [+FEATURE] Extbase (Utility): Allow plugins to be registered as new content element
183 Added a fifth parameter to Tx_Extbase_Utility_Extension::configurePlugin that allows
184 you to specify the plugin type (currently "list_type" and "CType" are supported).
185 Thanks to Marc Bastian Heinrichs, Rens Admiraal & Franz Koch for your help!
186 Resolves: #10666
187 [+BUGFIX] Extbase (Utility): Added condition to Tx_Extbase_Utility_Extension::getTargetPidByPlugin() in order to only select tt_content entries that are of CType "list". Thanks to Marc Bastian Heinrichs
188 [!!!][~TASK] Extbase (Configuration): Major rework of the ConfigurationManager
189 Configuration of controllers and actions is now stored in a global registry
190 ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']). But you
191 should never access this directly. Instead always retrieve the frameworkConfiguration
192 from the ConfigurationManager.
193 Inserting an Extbase plugin is now as simple as:
194 lib.foo = USER
195 lib.foo {
196 userFunc = tx_extbase_core_bootstrap->run
197 extensionName = YourExtension
198 pluginName = YourPlugin
199 }
200 This is not really a breaking change as it does not change the public API. But it's not unlikely that it changes the behavior of your Extension in case you modified the TypoScript, that is generated by Tx_Extbase_Utility_Extension::configurePlugin().
201 NOTE: Unit tests of Extbase and Fluid v4 are broken currently. We'll be fixing those asap
202 [~TAKS] Extbase (MVC): FrontendRequestHandler now retrieves the current cObject through the ConfigurationManager
203 [+BUGFIX] Extbase (MVC): FrontendRequestHandler was refering to $this->frameworkConfiguration which wasn't available
204 [-API] Extbase (MVC): marked Tx_Extbase_MVC_Web_Request::getContentObjectData() deprecated as should retrieve the current cObject through the ConfigurationManager
205 [+TASK] Extbase (MVC): modified the Tx_Extbase_MVC_Web_RequestBuilder so that it's possible to change the action only by specifying the action parameter. Before you had to specify the controller as well, even if it was the default controller
206 [+BUGFIX] Extbase (MVC): Flashmessages now share a scope throughout the extension. Before, every plugin had it's own scope leading to the messages only being output when entering the same plugin again (e.g. redirecting from one plugin to another would never display the messages)
207 [~TASK] Extbase (Core): The Flashmessages now get persisted in the Bootstrap in resetSingletons()
208 [-TASK] Extbase (Core): Removed some commented lines from Bootstrap
209 [FEATURE] Extbase (Object): Make DI Class Mapping configurable through TS
210 It is now possible to configure the Dependency Injection class mapping by specifying:
211 config.tx_extbase.objects.[FullyQualifiedObjectName].className = [NewClassName]
212 This has the effect of effectively replacing [FullyQualifiedObjectName] with
213 [NewClassName].
214 Resolves: #10559
215 [-TASK] Extbase (Utility): Removed two obsolete checks for $GLOBALS['TSFE']->tmpl->setup['tt_content.']['list.']['20.'] in Tx_Extbase_Utility_Extension
216 [~TASK] Extbase: added two doc comments that were missing
217 [+BUGFIX] Extbase (Persistence): Extbase still used PHPs current() on some QueryResults in Persistence/Repository. Replaced these by calls to the getFirst() method of the QueryResult
218 [+TASK] Extbase (Persistence): added a private field to the QueryResult to make the above case easier to debug: When calling current() on an Iterator, PHP returns the first field of that object instead of calling the current() method of the Iterator interface.. With our somewhat pragmatic approach you'll see the warning if you debug the results of current($query->execute())
219 [+BUGFIX] Extbase (Persistence): Replaced two occurrences of Query->count() by Query->execute()->count() to avoid deprecated warnings in the Core
220 [+BUGFIX] Extbase (MVC): view configuration (templateRootPath, ...) has to be set before View::canRender() is called
221 [!!!][+TASK] Extbase (MVC): The UriBuilder now uses the current cObject instead of creating a new instance in the constructor. This is a breaking change if you instantiated the UriBuilder in your code. Please use the Extbase ObjectManager or inject the ConfigurationManager manually.
222 [+BUGFIX] Extbase (Reflection): ReflectionService now uses a cacheIdentifier per Extension. Besides the Bootstrap now resets the ReflectionService after dispatching a request. This resolves #10146
223 [+TASK] Extbase (Configuration): The ConfigurationManager now holds the current cObject. You can retrieve it via ConfigurationManagerInterface::getContentObject()
224 [+BUGFIX] Extbase (Configuration): When loading configuration of other plugins, the context specific configuration (e.g. flexform settings) are no longer merged with the frameworkConfiguration
225 [+BUGFIX] Extbase (MVC): Controllers are no Singletons by default. If a controller contains stateful fields (e.g. $this->settings) this breaks multiple plugins on one page
226 [+TASK] Extbase (Persistence): QuerySettings now also store the storage page id(s). This is required for the upcoming Ajax Widgets
227 [+BUGFIX] Extbase: fixed php warning in Tx_Extbase_Persistence_LazyLoadingProxy when loading the real instance would return NULL. Resolves #10683
228 [+BUGFIX] Extbase: use 3rd parameter = TRUE of t3lib_div::trimExplode to split switchableControllerActionParts from flexform. Thanks to Georg Ringer. Resolves #10688
229 [+TASK] Extbase: Replaced "public static" by "static public" in various places to be CGL conform
230 [+TASK] Extbase: Marked Utitlity_Extension camelCase/underscore helper functions deprecated
231 [+TASK] Extbase: Removed obsolete FIXME comments, whitespace fixes
232 [!!!] Extbase: Reintegrating branch "dispatcher" to trunk. Resolves: #10605
233 Branch history:
234 [+FEATURE] Extbase (Configuration): Extend ConfigurationManager so that it can load configuration of different plugins
235 [+FEATURE] Extbase (Configuration): 1st level cache for ConfigurationManager. Resolves: #10717. Resolves: #10716
236 [+TASK] Extbase: cleaned up Configuration* implementation, replaced t3lib_div::makeInstance() calls
237 Streamlined ConfigurationManager API and enforced its usage throughout the Extbase classes.
238 Replaced all t3lib_div::makeInstance() calls by $objectManager->create()/$objectManager->get() throughout the Extbase classes.
239 Some smaller tweaks and fixes. Resolves: #10655. Resolves: #10712
240 [TASK] Extbase (Object): Make tests work again. Resolves: #10709
241 [TASK] Extbase (Object): Updated autoload.php and emconf. Relates to: #10561
242 [TASK] Extbase (Object): Use typed exceptions. Relates to: #10561
243 [TASK] Extbase (Object): CGL cleanup
244 Additionally, removed support for @inject annotations at methods. Relates to: #10561
245 [TASK] Extbase (Object): Remove getParents. Relates to: #10561
246 [TASK] Extbase (Object): Remove isSingleton. Relates to: #10561
247 [TASK] Extbase (Object): Remove injectExtensionSettings feature. Relates to: #10561
248 [TASK] Extbase (Object): Change namespaces to Tx_Extbase_Object_Container. Relates to: #10561
249 [TASK] Extbase (Object): Add Container to Extbase. Relates to: #10561
250 [+TASK] Extbase (Core): moved Tx_Extbase_Bootstrap to Tx_Extbase_Core_Bootstrap
251 Moving Bootstrap to be compliant with FLOW3
252 Removed obsolete Classes. Resolves: #10704
253 [+TASK] Extbase: Merged current trunk (r2689) with local modifications into dispatcher branch
254 Note: This still needs a cleanup and some fixes (see FIXME comments) before it can be merged back to the trunk. Relates to: #10605. Relates to: #10655
255 [+TASK] Extbase (Configuration): Moved CONFIGURATION_TYPE_* constraints to ConfigurationManagerInterface. Resolves #10604.
256 [~TASK] Extbase (Configuration): The concrete configuration management strategy gets instanciate only once now.
257 [+FEATURE] Extbase (MVC): Decoupled framework settings from Dispatcher.
258 With the new dependency injection feature you can get the Configuration Manager injected by adding the lines
259 protected $configurationManager;
260 public function injectConfigurationManager(Tx_Extbase_Configuration_ConfigurationManagerInterface $configurationManager) {
261 $this->configurationManager = $configurationManager;
262 }
263 You can get various types of configuration invoking
264 $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManager::CONFIGURATION_TYPE_EXTBASE)
265 where the class constant must be either CONFIGURATION_TYPE_EXTBASE (for Extbase settings), or CONFIGURATION_TYPE_SETTINGS (for the current module/plugin settings), or CONFIGURATION_TYPE_TYPOSCRIPT (for a raw TS array). Resolves #4741.
266 [~TAKS] Extbase: Removed obsolete code.
267 [~TASK] Extbase: Added core patch for mod.php (see previous commit).
268 [+TASK] Extbase: Changed the way a module gets called.
269 - You can now specify a function name to be invoked by mod.php:
270 $TBE_MODULES['_dispatcher'][] = 'Tx_Extbase_Bootstrap->callModule';
271 - This requires a core patch.
272 [~TASK] Extbase: Changed configuration of the RequestHandler class names to TypoScript.
273 - The request handlers can now be registered in TypoScript with the setting:
274 config.tx_extbase.mvc.requestHandlers.[RequestHandlerClassName] = [RequestHandlerClassName].
275 - There are now two RequestHandlers in Extbase: FrontendRequestHandler and BackendRequestHandler. Common functionality is in the AbstractRequestHandler.
276 [+API][+FEATURE] Extbase (Utility): Implemented mechanism to register RequestHandlers.
277 [+TASK] Extbase: Backported Request Handler Resolver.
278 [~TASK] Extbase: Added "deprecated" annotation to Dispatcher.
279 [~TASK] Extbase: Added missing comment.
280 [+BUGFIX] Extbase (Reflection): The ReflectionService now gets injected to the dispatcher. Related to #10146.
281 [+BUGFIX] Extbase (Reflection): Changed the way the Reflection Service and it's cache gets initialized.
282 * Removed check for pre-initialized Reflection Service in the Bootstrap.
283 * Now using a fixed cache key ('ReflectionData').
284 Related to #10146.
285 [~TASK] Extbase: First step of the Dispatcher refactoring.
286 * Added and adapted some Unit Tests.
287 * Moved the Dispatcher to MVC.
288 * Added a backwards compatibility Dispatcher on root level.
289 * Added a Bootstrap class.
290 * Removed all backend module support for now.
291 Related to #7153.
292 [+TASK] Extbase: Added branch for the dispatcher refactoring.
293 [!!!][+BUGFIX] Extbase: fixed typo in getter and setter of Tx_Extbase_Domain_Model_FrontendUser::lastlogin . Thanks to Christian Schwan. Resolves #9345
294 [+FEATURE] Extbase (MVC): Backport possibility to change the view object class name more easily
295 Backported FLOW3s improved resolveView() mechanism. Tx_Fluid_View_TemplateView is still the default implementation, but can be easily changed by setting $defaultViewObjectName in your controller. Besides it's possible to specifying different views depending on the current request format by setting $viewFormatToObjectNameMap.
296 NOTE: If the view can't be rendered, the new template based "NotFoundView" will be created. So instead of the invisible HTML comments of the EmptyView, you'll get a more meaningful error message if the template file could not be found
297 Resolves: #8990
298 [!!!][+FEATURE] Extbase (Persistence): Backport QueryResult from FLOW3
299 Now Query::execute() returns an instance of QueryResultInterface that allows it to modify the query before actually accessing the records that it retrieves. This is required for the upcoming "Fluid widgets" backport (#10568).
300 NOTE: This change is not backwards compatible, if you work with PHPs array_* functions on the query result. To work around this issue, you'll have to convert the query result to an array before by calling the QueryResult::toArray() method. We're planning to add a compatibility mode, but that's not yet implemented.
301 Resolves: #10566
302 [+BUGFIX] Extbase (Object): Minor fix in ObjectManager to make it compatible with PHP 5.2.x
303 Relates to: #9062
304 [+BUGFIX] Extbase (Object): Refactor Object Manager
305 The Object Manager is now at the same location and
306 has the same API as in FLOW3.
307 [+BUGFIX] Extbase: Major cleanups to Dependency Injection and Persistence
308 Now, DI finally works with Persistence, cleaning
309 this greatly up. Additionally, all internal
310 t3lib_div::makeInstance calls have been replaced.
311 Now, dependency injection is actually usable.
312 Additionally, we completely thought over which
313 persistence classes need to be singleton and which
314 should be prototype, leading finally to a
315 coherent design in the persistence layer.
316 [+BUGFIX] Extbase: remove non-used interfaces
317 Removed classes which were not used.
318 Relates to: #9062
319 Resolves: #10585
320 Resolves: #10564
321 * Cleaned up Persistence Backend
322 * Cleaned up QOM Factory
323 [+BUGFIX] Extbase (MVC): Fix arguments object
324 The arguments object is now correctly inheriting from ArrayObject
325 Resolves: #10562
326 [+BUGFIX] Extbase (MVC): Make database connection work again
327 Resolves: #10585
328 [+FEATURE] Extbase (DI): merging DI into trunk. (resolves #10558)
329 [+TASK] Extbase: Undefined identifier in Tx_Extbase_Persistence_Storage_Typo3DbBackend::removeRow
330 Method clearPageCache was given an undefined variable $uid as second parameter.
331 Resolves: #10570
332 [+TASK] Extbase: $query->contains generate incomplete SQL
333 Use FIND_IN_SET instead of a self-constructed query of LIKE statements
334 Resolves: #8959
335 [+BUGFIX] Extbase (Persistence): Removed method createQuery from the QOMFactory. It is neither part of the API nor is it used by Extbase. Resolves #10215
336 [+BUGFIX] Extbase (Property): Minor fix in PHP doc comment
337 Fix the order of @param annotation in Tx_Extbase_Property_Mapper::mapAndValidate()
338 Resolves: #5887
339 [~CONFIGURATION] Extbase (MVC): Changed default value for automatic target page determination
340 The page id gets automatically detected if plugin.tx_extensionname_pluginname.view.defaultPid
341 is an empty string (was "auto" before). This ensures backwards compatibility.
342 Resolves #9121
343 [TASK] Extbase: moved Release Notes to ChangeLog.txt.
344 [+FEATURE] Extbase (MVC): Automatic target page determination
345 you can use the "pageUid" argument of the link.* and uri.* view helpers
346 to link to a different page. That is deprecated though as we won't have
347 the notion of "page uids" in v5. Instead the target page is now determined
348 automatically.
349 If the target page can't be determined because more than one active
350 plugin is capable of handling the action an exception will be thrown.
351 In that case you'll have to define the target page either by using the
352 pageUid argument or - preferably - by setting
353 plugin.tx_extensionname_pluginname.view.defaultPid to a fixed page uid.
354 Note: This feature still has to be documented!
355 Resolves: #9121
356 [+FEATURE] Extbase (MVC): Configurable plugin namespace
357 until now the namespace (aka prefix) of Extbase plugins was
358 fixed (tx_extensionname_pluginname). This is now configurable
359 via TypoScript. Just write:
360 plugin.tx_extensionname_pluginname.view.pluginNamespace = my_custom_namespace
361 to change the prefix for a specific plugin or
362 plugin.tx_extensionname.view.pluginNamespace = my_custom_namespace
363 to change if for the whole extension.
364 Note: This feature still has to be documented!
365 Resolves: #8365
366
367 Changes for 1.3.0 Alpha 2
368 =========================
369 included in TYPO3 4.5.0 Alpha 2.
370
371 Since the last version, one (possible BREAKING) change happened:
372
373 * Fixed Extbase Caching Bug.
374 Non-cacheable actions were cached due to the fact that TYPO3s
375 TypoScript condition "GP" does not merge GET & POST vars.
376 Additionally "switchableControllerActions" that were overridden
377 in the plugin flexform were not taken into account.
378
379 !!! This is a breaking change if you set up your TS configuration
380 of the plugin manually.
381
382 Full Changes:
383 -------------
384
385 [!!!][+BUGFIX] Extbase: Fix Extbase Caching Bug (thanks to Bastian Waidelich)
386
387 [-TASK] Extbase (MVC): removed fallback to current page in AbstractController::redirect() as that's already done within the UriBuilder if $targetPageUid is NULL
388
389
390 Changes for 1.3.0 Alpha 1
391 =========================
392 included in TYPO3 4.5.0 Alpha 1.
393
394 Since the last version, the following notable things happened:
395
396 * All methods trying to find an object by uid now ignore the storagePid. This changes the behavior of argument mapping and the way extbase fetches 1:1 relations. Resolves #5631. You should not experience any negative side-effects of this change, i.e. if your extension worked before, it will definitely after this change. However, it makes the record handling more robust.
397 * Performance improvements in TypoScript::convertTypoScriptArrayToPlainArray. Thanks to Timo Schmidt.
398 * Numerous other bugfixes, see below.
399
400 Full Changes:
401 -------------
402 [~TASK] Extbase: Raised version number to 1.3.0-devel to reflect the version scheme defined in the wiki. Resolves #9152. Thanks Xavier for pointing to it.
403 [+TASK] Extbase (MVC): cleaned up View implementations and added assign() and assignMultiple() methods to ViewInterface. This resolves #9137
404 [+BUGFIX] Extbase: Fixed a small typo in extension description.
405 [+BUGFIX] Extbase (Persistence): DataMapper now mapps NULL into a property on non-existing related object instead of FALSE. Resolves #8973.
406 [+BUGFIX] Extbase (Reflection): getParentClass() in Tx_Extbase_Reflection_ClassReflection no longer causes a fatal error if no parent class exists. Resolves #8800.
407 [+BUGFIX] Extbase (Utility): Improved performance of TypoScript::convertTypoScriptArrayToPlainArray. Thanks to Timo Schmidt. Resolves #8857.
408 [~TASK] Extbase: Changed state to 'stable'. Resolves #8768.
409 [+BUGFIX] Extbase: Fixed EOL and encoding of several files. Resolves #8876.
410 [+BUGFIX] Extbase (MVC): Fixed a problem where a non-required action argument throwed Exception if it was not found in the Backend. Thanks to Marc Bastian Heinrichs. Resolves #7277.
411 [!!!][+BUGFIX] Extbase (Persistence): All methods trying to find an object by uid now ignores the storagePid. This changes the behavior of argument mapping and the way extbase fetches 1:1 relations. Resolves #5631.
412 [+BUGFIX] Extbase (Persistence): Fixed a problem where localized objects inside an aggregate are not translated. Resolves #8555.
413 [~TASK] Extbase: Removed new lines at the end of php files.
414
415 RELEASE NOTES of Extbase v1.0.0
416 ===============================
417
418 This package contains the Extbase Framework for Extensions. You may
419 also want to install the BlogExample (blog_example) to experiment
420 with. This little example extension demonstrates some of the main
421 features of Extbase. The documentation is bundled in a separate
422 extension called doc_extbase. Both, the blog_example and the
423 doc_extbase can downloaded via TER.
424
425 http://typo3.org/extensions/repository/view/blog_example/current/
426 http://typo3.org/extensions/repository/view/doc_extbase/current/
427
428 Currently Extbase is in ALPHA state. Do not expect everything in the
429 right place and shape. And keep in mind that the API may change
430 until TYPO3 v4.3beta1 is released.
431
432 If you have any feature requests or encountered issues regarding
433 this package please use the facilities on forge to report.
434
435 We are very open to answer your questions. Please use the newsgroup
436
437 typo3.projects.typo3v4mvc on lists.netfielders.de
438
439 so other developers can react to your comments and also
440 profit from the postet solutions. Do not contact a member of the
441 development team via private email (or skype, or visits, or ...)
442 until he accepted this channel. We all do coding for Extbase on
443 our sparetime and must handle our regular work load - and don't
444 forget about our families ;-).
445
446 We hope you have fun with this package!
447
448 -- Your Extbase Development Team
449
450 HOW TO CREATE THE CHANGELOG
451 ===========================
452 git log [startRevision]..HEAD --pretty=format:"%s%n%b%n" | grep -v "^$" | grep -v "git-svn-id"
453
454 Verify that the merge into the Core succeeded:
455 diff -urNw --exclude=".git" --exclude=".svn" -I "@version" ../../../typo3/sysext/extbase/ .