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