[Packages/TYPO3.CMS.git] / typo3 / sysext / extbase / ChangeLog.txt
1 ChangeLog for Extbase
2 =====================
4 Changes for 6.0.0
5 =================
7 Full Changes for 6.0.0
8 ======================
9 [TASK] Timestamp support for DateTimeConverter
10 [BUGFIX] MM_match_fields is ignored when persisting MM relations
11 [BUGFIX] Missing table definitions crash Dbal
12 [BUGFIX] Remove property item of category model
13 [TASK] Adjust namespaces of persistence unit tests
14 [TASK] Move persistence unit tests
15 [CLEANUP] Adjust code to coding guidelines
16 [TASK] Comment legacy files to be removed with 6.2
17 [BUGFIX] Use tablename for fullQuoteStr call
18 [BUGFIX] Remove newlines after closing php tag
19 [BUGFIX] Force command controller task arguments saved as array
20 [BUGFIX] Prevent sql errors with unsupported relation
21 [BUGFIX] Make saving scheduler commandController tasks working again
22 [BUGFIX] Add missing TypoScript Mapping for Category Model
23 [BUGFIX] Tx_Extbase_DomainObject_AbstractDomainObject#getUid is final
24 [BUGFIX] Fix small DebuggerUtility issues
25 [BUGFIX] Fix and deprecate legacy creation of objects in repository
26 [!!!][BUGFIX] Remove property isOnline from frontenduser model
27 [BUGFIX] Make ValidatorResolver respect namespaces
28 [BUGFIX] Reset 'vendorName' in RequestBuilder to NULL for new requests
29 [BUGFIX] Correctly apply _LOCAL_LANG from typoscript
30 [TASK] Rename Reflection/Service to Reflection/ReflectionService
31 [BUGFIX] Cache in BackendConfigurationManager is not taking pageId into account
32 [BUGFIX] DataMapperFactory respects foreign_table_field
33 [BUGFIX] Fix Annotation for Category model
34 [TASK] Add "Abstract" prefix to abstract task class
35 [TASK] Adjust phpdoc for classes (files) of backports
36 [BUBFIX] Fix fatal error in Test
37 [BUGFIX] Fix several namespace related bugs
38 [BUGFIX] Mapping of DomainObject with namespaces
39 [BUGFIX] Dont respect pid for static & rootlevel tables
40 [BUGFIX] Namespaced domain models are not updated
41 [TASK] Adjust phpdoc to namespaces
42 [TASK] Resync TYPO3Flow- and Extbase-Persistence
43 [BUGFIX] Misspelling in Typo3DbBackend.php
44 [TASK] Cleanup Typo3DbBackend
45 [BUGFIX] resolveValidatorObjectName support for namespaces
46 [BUGFIX] Support plugins in namespaced extensions
47 [BUGFIX] Rename File after renaming class
48 [BUGFIX] Typo3DbBackend language handling crashes in BE
49 [TASK] Rename FlashMessages to FlashMessageContainer
50 [TASK] Remove deprecated methods and classes
51 [TASK] Rename ExtensionManager class
52 [TASK] Update doc block example code to to namespaces
53 [BUGFIX] PHP 5.4 unit test warnings
54 [TASK] Change objectStorage patch in migration script
55 [TASK] Change namespace and classname of ObjectStorage
56 [TASK] Move ObjectStorage from Generic to Persistence
57 [TASK] Remove ext_autoload.php
58 [TASK] Cleanup files in persistence
59 [TASK] Remove duplicate files in persistence
60 Revert "[BUGFIX] Support plugins in namespaced extensions"
61 [BUGFIX] Support plugins in namespaced extensions
62 [TASK] Use core interface for accessible objects
63 [TASK] Remove forceCharset references from LocalizationUtility
64 [BUGFIX] NotEmpty Validator does not work with arrays and objects
65 [TASK] Add phpdoc-comments for variables
66 [BUGFIX] Removed trash files and their references
67 [CLEANUP] Remove old SVN comments
68 [BUGFIX] Fix mismatches between count of param in phpdoc and function-signature
69 [TASK] Add explanation for $configurationType
70 [BUGFIX] Fix namespace related bugs in DebuggerUtility
71 [TASK] Clean up testcases to use getAccessibleMock() function
72 [TASK] Fix typo: seperator -> separator
73 Revert "[BUGFIX] Property mapper: Exception not thrown but skipped"
74 [BUGFIX] Replace deprecated calls in Repository
75 [BUGFIX] Change class name hash generation to md5
76 [BUGFIX] Fix broken table name mapping for namespaced extension models
77 [BUGFIX] Fix generation of class schema for namespaced arguments
78 [BUGFIX] Query Generation creates invalid query in BE scope
79 [BUGFIX] Fix generation of class name hash
80 [BUGFIX] Correct link to first page in BE paginator widget
81 [BUGFIX] Respect namespaced models in the reflection service
82 [BUGFIX] Property Validation with Namespaces
83 [TASK] Provide class alias file for extbase
84 [TASK] Introduce base class for PHPUnit tests
85 [TASK] Update version number of all sysexts to 6.0.0
86 [BUGFIX] Remove PHP warnings in request
87 [TASK] Make all classes non final
88 [BUGFIX] Fix Exception Class Name
89 [TASK] Fix class naming and alias map after namespace change
90 [BUGFIX] Fix translation fallback
91 [TASK] Remove superfluous parenthesis in sysexts
92 [TASK] Adopt Extbase to the Autoloader -> ClassLoader name change
93 [BUGFIX] Broken backups in BackendConfigurationManagerTest
94 [BUGFIX] Incomplete mocking and backups it tests
95 [BUGFIX] Declare LocalizationUtility::translateFileReference static
96 [BUGFIX] TypeHandlingService throws Exception for StorageObjects
97 [BUGFIX] fix Mvc/Request builds old classnames
98 [BUGFIX] Fix old propertymapper checking target with namespace
99 [BUGFIX] Fixed missing class mapping without TS
100 [BUGFIX] Fix classes without or broken namespace
101 [CLEANUP] General code cleanup
102 [BUGFIX] Subrequests can't be resolved
103 [BUGFIX] Make Cli\Command Namespace aware
104 [BUGFIX] Unit tests after namespace switch
105 [BUGFIX] Naming clash: Fix several unit test failures
106 [BUGFIX] Interface Tx_Scheduler_AdditionalFieldProvider' not found
107 [BUGFIX] Reanimate unit tests
108 [TASK] Make extbase tests run again
109 [TASK] Move and Namespace classes
110 [BUGFIX] Failing test translateForEmptyStringKeyReturnsNull()
111 [FEATURE] Integrate basic file abstraction layer models
112 [BUGFIX] Property mapper: Exception not thrown but skipped
113 [TASK] Unit test for FrontendUserGroup model
114 [TASK] Unit test for FrontendUser model
115 [BUGFIX] ObjectManager dependencies in SignalSlot registration
116 [BUGFIX] Possible failure in dependency injection
117 [BUGFIX] Web Request should map $_FILES into arguments
118 [FEATURE] Backend usergroup model and repository
119 [FEATURE] File mount model and repository
120 [FEATURE] Handle enable fields and deleted records settings granulary
121 [FEATURE] Improved translation handling for statement generation
122 [BUGFIX] email validator
123 [BUGFIX] DataMapper returns array on RELATION_HAS_ONE
124 [Task] Make Exception for Controllerdetermination more expressive
125 [TASK] Add Domain Model and Repository to Category
126 [BUG] Fix lastlogin property to correct lowerCamelCase
127 [FEATURE] Add a BackendUser model
128 [TASK] Small bugfix in Tx_Extbase_MVC_View_ViewInterface
129 [BUGFIX] Remove additional slashes from typolink urls if prefixing
130 [BUGFIX] public function configureModule should be static
131 [FEATURE][Performance] Add caches for persistence layer
132 [TASK] use the objectManager to create empty domain objects
133 [BUGFIX] Container calls Cache too often
134 [TASK] Update Readme to point to the current documentation location
135 [BUGFIX] Only set request for Web_Response
136 [TASK] Harmonize coding style of if constructs
137 [BUGFIX] CLI argument handling chokes on = use
138 Merge "[BUGFIX] Priority of CLI request handler should be lower"
139 [BUGFIX] Priority of CLI request handler should be lower
140 [BUGFIX] Return NULL instead of empty string in Localization::translate()
141 [BUGFIX] Fix unit test for NumberRangeValidator
142 [BUGFIX] FLUIDTEMPLATE - Serialization of 'Closure' is not allowed
143 [BUGFIX] Extbase core bootstrap not found in frontend
144 [BUGFIX] Fatal error in reports module
145 Merge "[Task] Update changelog and version to 6.0.0-dev"
146 [CLEANUP] Cleaned up Extbase
147 Merge "[TASK] Backport changes to Extbase_Error_Message"
148 Merge "[TASK] Improve performance of Utility/Arrays::integerExplode"
149 Merge "[BUGFIX] Fix undefined variables in Typo3DBBackend::parseOrderings"
150 [BUGFIX] Fix undefined variables in Typo3DBBackend::parseOrderings
151 Merge "[TASK] Remove trailing whitespace"
152 [FEATURE] Allow overwriting of Bootstrap with DI
153 [TASK] Sync persistence folder scheme with FLOW3
154 [CLEANUP] clean up ext_autoload.php
155 [Task] Update changelog and version to 6.0.0-dev
156 [TASK] Remove trailing whitespace
157 [TASK] Remove deprecated methods & properties
158 [TASK] Remove access to constant TYPO3_UseCachingFramework
159 Merge "[BUGFIX] Respect all subclasses (single table inheritance)"
160 [TASK] Backport changes to Extbase_Error_Message
161 [TASK] Improve performance of Utility/Arrays::integerExplode
163 Changes for 4.7.0
164 =================
166 This release features 48 changes, most of them are bugfixes and performance improvments.
167 Special thanks goes to all the folks who attended the codesprint, you really got stuff
168 done! Of course thanks goes to all the community members as well, for submitting patches.
170 You rock!
172 !!! Changes in Signal / Slot implementation
173 -------------------------------------------
175 A registered slot now gets the signalInformation (classname::name) by default
176 (was not given before) set as last parameter in the arguments array. You can
177 avoid this by setting passSignalInformation to FALSE in your connect()-call.
179 CommandController as SchedulerTasks
180 -----------------------------------
182 It's now possible to let your commandController be run as scheduler tasks. See
183 http://forge.typo3.org/projects/typo3v4-mvc/wiki/CommandControllerInSchedulerTask
184 for more information.
186 Object-aware Debugger from FLOW3
187 --------------------------------
189 It always was hard to debug Extbase objects because of their depth and recursion.
190 With this release the object-aware debugger from FLOW3 was backported. Just use
191 Tx_Extbase_Utility_Debugger::var_dump() instead.
193 DI works without inject-methods
194 -------------------------------
196 You can now use @inject annotations to your protected properties and the objectManager
197 will take care, even without the inject-method. Please notice that this works through
198 reflection and might be slow! Please profile your code or use inject-methods for now.
200 Shorthand syntax for foreign validators
201 ---------------------------------------
203 You can now use foreign validators without giving the hole classname. Just use
204 @validate YourExtension::Foo
205 and Extbase will try to find
206 Tx_YourExtension_Validation_Validator_FooValidator.
208 Full Changes for 4.7.0
209 ======================
210 [RELEASE] Extbase 4.7.0
211 [TASK] Update version number to 4.7.0rc2
212 [BUGFIX] Respect localized records when auto determining defaultPid
213 [TASK] Rename deprecation message version from 1.6 to 6.0
214 [TASK] Update version to 4.7.0rc1
215 [BUGFIX] Fix the unit tests to work with PHPUnit 3.6
216 [BUGFIX] Unit test failures concerning the HMAC
217 [TASK] Add unittest for shorthand for custom validators
218 [SECURITY] Protect arguments of form __referrer with HMAC
219 [TASK] Update version to 4.7.0beta3
220 [BUGFIX] Fix the @return of findAll
221 [+BUGFIX] Make $query->equals, no case sensitivity, work with UTF8
222 [BUGFIX] Add missing "command" variable to Tx_Extbase_MVC_CLI_Request
223 [BUGFIX] Fix unit tests
224 [BUGFIX] parseDynamicOperand appends to uninitialized variable
225 [BUGFIX] Tx_Extbase_Persistence_QueryInterface needs to provide getSource
226 [CLEANUP] Replace deprecated interface from unittests
227 [BUGFIX] property mapping for models w/o __construct
228 [BUGFIX] Extbase produces errors in TYPO3 Log
229 [BUGFIX] ObjectContainer does not support namespaces
230 [BUGFIX] Removed obsolet file.
231 Revert "[+CLEANUP] correct sql statement building"
232 [FEATURE] Shorthand syntax for foreign Validators
233 [BUGFIX] Set default storagePageUid to current page in BE context
234 [+FEATURE] make DI work without inject-methods
235 Revert "[BUGFIX] keep PersistentObjectConverterTest from cloning objects"
236 [BUGFIX] Reset LazyObjectStorage array pointer at initialization
237 [BUGFIX] Enable some support for workspace previews
238 [BUGFIX] Repository replace() does not replace unpersisted objects
239 [BUGFIX] Child objects are now fetched only by uid (pid and sys_language_uid are ignored).
240 [BUGFIX] adjust SignalSlotDispatcher's unit-tests
241 [TASK] Backported FLOW3 Debugger
242 [+CLEANUP] correct sql statement building
243 [CLEANUP] Performance in Reflection Service's cache handling
244 [BUGFIX] Fatal error on matching non-existing column, DB Backend
245 [FEATURE] Run CommandController commands through Scheduler
246 [REVERT] let PersistentObjectConverter clone objects
247 [BUGFIX] keep PersistentObjectConverterTest from cloning objects
248 [!!!][~BACKPORT] backport FLOW3 changes to SignalSlotDispatcher
249 [TASK] Coding guidelines cleanup for ClassInfo class
250 [BUGFIX] Invalid LOCAL_LANG overlay for non-existing languages
251 [BUGFIX] Make SignalSlot Dispatcher a singleton
252 [BUGFIX] DateTime properties are not mapped correctly
253 [TASK] Extbase (MVC): Avoid code-duplication in Tx_Extbase_MVC_Web_FrontendRequestHandler::isCacheable()
254 [BUGFIX] Make changed action resolving backwards compatible
255 [CLEANUP] remove not needed parameter
256 [BUGFIX] Fix PHP Warnings in Unit Tests
259 Changes for 1.4.0:
260 ==================
261 included in TYPO3 4.6.0.
263 This release features more than 100 changes, most of them being bugfixes in all areas of Extbase.
264 Thanks every community member for bug reports, submitting patches and reviewing! Extbase
265 would not be possible without you!
267 !!! New Property Mapper, updated MVC stack
268 ------------------------------------------
270 The Property Mapper has been completely rewritten in FLOW3, and this has also been backported
271 to Extbase. The new property mapper is very configurable and extensible.
273 Furthermore, the MVC stack has been adjusted to be in sync with FLOW3 again. However, the new
274 behavior is ONLY ACTIVATED MANUALLY. We suggest that you activate it for your new extensions
275 by inserting:
277 plugin.tx_[yourExtensionName].features.rewrittenPropertyMapper = 1
279 The documentation for the new property mapper can be found at
281 http://flow3.typo3.org/documentation/guide/partiii/propertymapping.html
283 They also apply to Extbase.
285 !!! Updated Validation API
286 --------------------------
288 The Validation API has also changed, but this is only a breaking change if you do NOT subclass
289 *AbstractValidator*, but implement *ValidatorInterface* yourself. In this case, you need to
290 adjust your custom validator to support the new API.
292 Dependency Injection for Domain Objects
293 ---------------------------------------
295 Dependency Injection is now also possible for reconstituted Domain Objects.
297 Signal / Slot implementation
298 ----------------------------
300 The "Signal / Slot" feature has been backported from FLOW3, implementing a future-proof
301 alternative to hooks.
303 Command Controller
304 ------------------
306 Use it from commandline like this:
307 ./cli_dispatch.phpsh extbase <command identifier> --argumentName=value
309 for example:
310 ./cli_dispatch.phpsh extbase help
312 NOTE: Unlike in FLOW3 Commands have to be registered explictly
313 in ext_localconf.php in order to be callable via CLI:
314 if (TYPO3_MODE === 'BE') {
315 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'][] = 'Tx_MyExtension_Command_FooCommandController';
316 }
319 Full Changes for 1.4.0 beta1 - 1.4.0:
320 =====================================
321 [BUGFIX] Pootle: Multi-line labels are not rendered properly
322 [TASK] English XLIFF files should not contain target element
323 [TASK] Fix CGL issues on "else if" constructs
324 [TASK] Update version to 1.4.0-rc1
325 [FEATURE] Backport CommandController Implementation
326 [!!!][TASK] Disable rewritten property mapper by default
327 [BUGFIX] Removing "Repository" in class name makes extensions unusable
328 [BUGFIX] Default error FlashMessage has wrong severity
329 [BUGFIX] Fix check against @ignorevalidation annotations
330 [BUGFIX] ConfigurationManager use FrontendSimulator only if neccessary
331 [TASK] Increase version number
332 [BUGFIX] Default action is not properly resolved
333 [FEATURE] Descriptive error on invalid action name
334 [BUGFIX] Replaced call to deprecated t3lib_div::testInt()
335 [FEATURE] Skip default controller and action in generated URIs
336 [FEATURE] Setting a scheme for a URI
337 [BUGFIX] Don't clone ContentObject in ConfigurationManager
338 [TASK] Remove deprecated methods & properties
339 [BUGFIX] Tx_Extbase_Utility_Localization::translate() must return NULL for non-existing keys
340 [BUGFIX] Clone ContentObject
341 [BUGFIX] Fix method visibility of AbstractConfigurationManager::getTypoScriptSetup()
342 [TASK] Convert XLIFF files to Tab indentation
343 [BUGFIX] XLIFF: Approved attribute is on wrong element
344 [+BUGFIX] Fixing incorrect references to F3 classes
345 [+BUGFIX] Added missing initializeView method in EmptyView
346 [+BUGFIX] Fix classname of Exception, ConfigurationManager
348 Full Changes for 1.4.0 beta1:
349 =============================
350 [!!!][TASK] Enable rewritten property mapper by default
351 [+FEATURE] Extbase (Persistence): Allow pid of object to be set from action-controller. Thanks to Michael Budnick and Balisky Christophe. Resolves: #7572
352 [FEATURE] Speed up ObjectAccess
353 [+FEATURE] Extbase (Persistence): Allow removing previously set limit with unsetLimit(). Resolves: #27445
354 [-TASK] Remove autoloader. Thanks to Christian Kuhn. Resolves: #28249
355 [+FEATURE] introduce signal in MVC/Dispatcher
356 [TASK] Correct classnaming for Tx_Extbase_Tests_Unit_BaseTestCase
357 [-BUGFIX] remove datecheck on timezone test
358 [+FEATURE] remove usage of deprecated methods in unit-tests
359 [BUGFIX] Adjust unit tests to changes
360 [BUGFIX] create ClassSchema with ObjectManager::create()
361 [BUGFIX] TypeHandling class not found. This is a hotfix for #28121. Resolves: #28121
362 [TASK] Extbase (Utility): Add service for TypeHandling. Related: #13864
363 [+BUGFIX] Extbase: CGL: Convert case of acronyms from UPPERCASE to CamelCase. Resolves: #12189
364 [TASK] Extbase: Use strpos() instead of strstr() where possible
365 [+BUGFIX] allow skipping of arguments in signal dispatch
366 [TASK] Adjust PHP dependency in ext_emconf.php
367 [FEATURE] Add check for loaded DBAL to requirements check
368 [TASK] Recreate ext_autoload.php. Resolves: #27680
369 [!!!][+FEATURE] (MVC): Modify MVC stack to use the new property mapper. Resolves: #27656
370 [!!!][+FEATURE] (Validation): Adjusted and re-done Validation API. Resolves: #27653
371 [+FEATURE] (Property): Add new property mapper. Related: #27059
372 [+FEATURE] (Persistence): Synchronize PersistenceManagerInterface more with FLOW3. Resolves: #27657
373 [+FEATURE] (Reflection): Object Access can now access private properties. Resolves: #27652
374 [+FEATURE] (Utility): synchronize TypeHandling class with FLOW3. Resolves: #27651
375 [!!!][FEATURE] Improve error and message handling. Resolves: #27650
376 [TASK] (MVC, Property): Deprecation of the the old property mapper
377 [+FEATURE] (Configuration): Feature flag implementation
378 [+BUGFIX] (Persistence): return correct objectCountByQuery when query contains left join and no limit. Fixes: #13075
379 [BUGFIX] Adapt cache configuration to 4.6. Resolves: #27546
380 [+BUGFIX] (SignalSlot): Fix unit tests. Resolves: #27550
381 [+BUGFIX] Make ObjectManager::isRegistered work
382 [+FEATURE] backport SignalSlotDispatcher
383 [+BUGFIX] Fix localization handling to support XLIFF. Resolves: #27411
384 [+BUGFIX] Extbase (Validation): E-mail address with space at the end is invalid. Thanks to Marc Bastian Heinrichs. Resolves: #27305
385 [+BUGFIX] Throw exception if a class to be reflected does not exist. Fixes: #8718
386 [TASK][!!!] Fix localization handling to support XLIFF. Resolves: #27411
387 [TASK] Extbase (Validation): Clean up tests for FloatValidatorTest and Integer ValidatorTest
388 [+BUGFIX] Extbase (Persistence): Use correct language-uid for translations. Thanks to Benjamin Mack. Resolves: #26521
389 [TASK] Extbase (Persistence): Remove duplicate registration in identity map. Thanks to Alexander Stehlik. Resolves: #26875
390 [BUGFIX] Fix EmailAddressValidatorTest
391 [+FEATURE] Extbase (MVC): Make response format configurable in TypoScript. Thanks to Christian Zenker. Resolves: #9216
392 [BUGFIX] Docu, AbstractController: Clearer difference of forward/redirect. Resolves: #7900
393 [BUGFIX] Fix case of setChildSortByFieldName in DataMapFactory. Resolves: #27334
394 [+BUGFIX] (Property) Fixed only adding objects to ObjectStorage. Thanks to Thomas Maroschik. Fixes: #13288
395 [+TASK] Extbase: Move static typoscript utility methods to a service. Related: #13864
396 [+TASK] Extbase: Move most of the static extension utility methods to a service. Related: #13864
397 [+BUGFIX] baseUri is added on external links. Thanks to Michael Feinbier for this fix! Resolves: #10258
398 [+BUGFIX] (Testing): Fix wrong doc comment in BaseTestCase. Resolves #13695
399 [+BUGFIX] Cloning a ValueObject should not set its uid to NULL. Resolves #26772
400 [+BUGFIX] ObjectStorage->toArray(): fix array pointer problem. Resolves #9117
401 [+BUGFIX] Persistence: Fixed building unionStatement from opposite. Thanks to Christian Zindel. Resolves #13782
402 [+BUGFIX] Persistence: Update tstamp column on objects removal. Thanks to Michel Nederlof. Resolves #10634
403 [+BUGFIX] correct warning in ObjectStorage & LazyObjectStorage
404 [~CLEANUP] some smaller comment cleanups
405 [+TASK] Extbase: Moved static cache utility class to a service. Relates to: #13864
406 [+FEATURE] implement ObjectManager::isRegistered()
407 [+TASK] improve exception message in Argument
408 [TASK] Performance tuning in container by moving some information into the cached ClassInfo object.
409 [~BUGFIX] avoid fe_user's type to be overridden
410 [+BUGFIX] Avoiding cHash for nonCacheable actions prevent action from being called. Related: #13970
411 [+BUGFIX] MVC: Make forwarding of objects work. Resolves #9867
412 [~CLEANUP] correct function parameter types
413 [+BUGFIX] Persistence: return ObjectCount return value as an integer. Thanks to Georg Ringer. Resolves #13151
414 [+BUGFIX] Revert incorrect deletion of Query::count() & Query::withUid(). Relates: #13745
415 [~CLEANUP] apply naming convention for flexForms
416 [+TASK] Move FlexForm parsing to a dedicated Service. Thanks to Rens Admiraal. Resolves #13032
417 [!!!][+BUGFIX] make backend-modules in web use new pagetree by default
418 [~CLEANUP] smaller deprecated clean-ups
419 [+FEATURE] Extbase: Enable Dependency Injection for Domain Models. Thanks to Pascal Jungblut. Resolves #11311
420 [+BUGFIX] (Persistence) Make Typo3QuerySettings exchangeable. Resolves #13191
421 [+BUGFIX] (Persistence) clone setDefaultQuerySettings for new queries. Resolves #12702
422 [~BUGFIX] correct annotations of Tx_Extbase_Persistence_Mapper_DataMapper. Resolves #13185. Thanks to Simon Schaufelberger.
423 [~TASK] (FlashMessages) finish the renaming of flashMessages
424 [+BUGFIX] (Configuration): Adjusted ConfigurationManagerInterface Interface to implementation
425 [~TASK] Extbase: Raising version from 1.3.0 to 1.4.0-devel
426 [+TASK] Extbase (MVC): Removed duplicated code from RequestBuilder. Thanks to Peter Niederlag. Resolves #12569.
429 Changes for 1.3.0:
430 ==================
431 included in TYPO3 4.5.0 LTS.
433 This release fixes an important bug in the persistence layer, which caused related objects not to be updated.
435 Full Changes for 1.3.0:
436 =======================
438 [+BUGFIX] Extbase (Tests): reset added t3lib_div instances in UriBuilder & Extension tests
439 [+BUGFIX] Extbase (Persistence): Fixed updating of related objects. Thanks to Björn Steinbrück and Bastian Waidelich for digging into this issue. Resolves #9270, #9182, #10211.
440 This is the second attempt after having reverted the first one in r3920. The patch includes some clean-up. Important additional changes:
441 * The objects within an ObjectStorage are now added to the queue. This is necessary to persist changes made to those contained objects without having changed the composition of objects.
442 * Moved the _memorizeCleanState() from the AbstractEntity to the AbstractDomainObject. In theory ValueObjects are immutable, but we need this as sometimes ValueObjects are stored in two steps (1. to get a UID, 2. to persist its properties). Maybe we have to recheck this for 1.4.
443 * Fixed some possible problems with detecting an ObjectStorage (namely SplObjectStorage->getUid()).
444 [+TASK] Extbase (Persistence): Added two properties to describe a weird PHP behavior if calling current() on an ObjectStorage.
445 [+BUGFIX] Extbase (MVC): Fixed argument order of Tx_Extbase_Utility_Extension::isActionCacheable() call in UriBuilder
446 [+TASK] Extbase (DomainObject): Added setPid() and getPid() to the DomainObjectInterface and removed the "final" keyword.
447 [~TASK] Extbase: Moved isActionCacheable() from UriBuilder to Utility/Extension helper class
448 Moved the protected method to a public static functions in Tx_Extbase_Utility_Extension
449 and added respective unit tests.
450 Note: We're not happy with all the public static functions in Utility/Extension.php
451 but that's currently the place for those helper functions.
452 [+TASK] Extbase (Utility): implemented validation of arguments passed to sql statements in Tx_Extbase_Utility_Cache. (resolves #11978)
454 Changes for 1.3.0 RC1:
455 ======================
456 included in TYPO3 4.5.0 RC1.
458 This release features many bugfixes, in the following areas:
459 * Persistence - invalid SQL has been fixed at various places
460 * MVC - the URI Builder can now handle cached / uncached actions correctly
461 * Improved error handling to catch some configuration errors
462 * Localization - TypoScript overrides for locallang keys with dot inside now works (_LOCAL_LANG.foo.bar)
463 * Persistence - added "pid" property and getter and setter to AbstractDomainModel; thus you can now move
464 domain objects to different pages. However, this feature has *no support for workspaces* yet.
465 * Dependency Injection - now allows the injection of prototypes (see below)
466 * Configuration - for defining the Storage PID, one can use arbitary TypoScript objects (see below)
468 Dependency Injection Improvements
469 ---------------------------------
471 Now, Prototype objects are allowed to be injected into other objects. This means the following cases
472 are supported:
474 * Singletons which need Singletons (most common)
475 * Singletons which need Prototypes (very uncommon,
476 as it usually hints at the fact that the injected
477 prototype should be a singleton). In this case,
479 * Prototypes which need Singletons
480 * Prototypes which need Prototypes
482 TypoScript Storage PID Improvements
483 -----------------------------------
485 The persistence.storagePid now has stdWrap properties so the storagePid can be set dynamically.
486 Now follows an example for use in the Frontend:
487 plugin.tx_extkey.persistence.storagePid.cObject = TEXT
488 plugin.tx_extkey.persistence.storagePid.cObject.value = 8,3
489 ... and this is how you can use it in the backend:
490 module.tx_extkey.persistence.storagePid.cObject = TEXT
491 module.tx_extkey.persistence.storagePid.cObject.value = 8,3
493 Full Changes for 1.3.0 RC1:
494 ===========================
495 [+BUGFIX] Extbase (Object): constructor injection now works if default value for a dependency is NULL. Thanks to Lienhart Woitok! Resolves #11623
496 [+BUGFIX] Extbase (Object): Allow injection of prototypes via dependency injection. Resolves #12013
497 [+BUGFIX] Extbase (Persistence): Use sql_free_result() in Typo3DbBackend to free result memory. Resolves #10957
498 [~BUGFIX] Extbase (Persistence): fixed an wrong referenced exception (resolves #12403)
499 [~BUGFIX] Extbase (Persistence): make Tx_Extbase_Persistence_Repository::remove() handle freshly created objects right. (resolves #11128)
500 [+BUGFIX] Extbase (MVC): UriBuilder automatically added a cHash even on links to nonCacheable actions where this is not needed/recommended (resolves #8565)
501 [~BUGFIX] Extbase (Persistence): made union statement on comma seperated list use find_in_set (Thanks to Marc Bastian Heinrichs) (resolves #9772)
502 [~FOLLOWUP] Extbase (Utility): allow clearPageCache() to clear single, multiple and all pageCaches. (resolves 11978)
503 [+TASK] Extbase (Utility): allow clearPageCache() to clear single, multiple and all pageCaches.
504 [+BUGFIX] Extbase (MVC): Improve Error Handling in Request Builder. Resolves #11302
505 [+BUGFIX] Extbase (Persistence): remove superfluous require_once statements. Thanks to Oliver Klee. Resolves #12324
506 [+BUGFIX] Extbase (Tests): Remove require_once of phpunit testclasses. Thanks to Oliver Klee. Resolves #12323
507 [+BUGFIX] Extbase (Utility): Make _LOCAL_LANG override work with dots. Thanks to Thomas Maroschik. Resolves #12121
508 [+BUGFIX] Extbase (Persistence): Fixed using the correct columnname for contains comparison with RELATION_HAS_MANY and empty parentKeyFieldName. Resolves #11048
509 [+BUGFIX] Extbase (Persistence): Added the missing pid property to the AbstractDomainModel. Related to #11361
510 [+BUGFIX] Extbase (Persistence): Language Oberlay now works with page table as well. Thanks to Andre Stoesel. Resolves #11319
511 [+BUGFIX] Extbase (Persistence): The QueryObject gets cloned now in the getFirst() method of the QueryResult (as it was intended). Thanks to Sebastian Fischer. Resolves #11855.
512 [+BUGFIX] Extbase (Bootstrap): Bootstrap calls initialize on reflectionService if it's already initialized. Resolves #12346, resolves #12156
513 [+BUGFIX] Extbase (Persistence): Fix equals constraint with $caseSensitive FALSE (closing bracket missing). Thanks to Alexander Berl. Resolves #10781
514 [+BUGFIX] Extbase (Reflection): ObjectAccess::isPropertyGettable works for ArrayAccess objects. Resolves #10148
515 [+BUGFIX] Extbase (Configuration): Allow StoragePid to be manually defined by TS. Thanks to Rens Admiraal! Resolves #8397
516 [+BUGFIX] Extbase (Configuration): Fix warning in AbstractConfigurationManager. Resolves #11631
517 [+BUGFIX] Extbase (Object): Disabling Dependency Injection for injectSettings method. Resolves #11011
520 Changes for 1.3.0 Beta 4:
521 =========================
522 included in TYPO3 4.5.0 Beta 4.
524 This release contains numerous bugfixes, and a few small features:
526 * Tx_Extbase_Utility_Extension::registerPlugin() now has a fourth parameter $pluginIconPathAndFilename
527 that you can set to the path of an icon, that will be displayed in the plugin dropdown in the backend.
528 You can use it like:
529 Tx_Extbase_Utility_Extension::registerPlugin(
530 $_EXTKEY,
531 'MyPlugin',
532 'My Plugin description',
533 t3lib_extMgm::extRelPath($_EXTKEY) . 'Resources/Public/Icons/someIcon.gif'
534 );
535 * Hidden Records in Workspaces now work
536 Before, if t3lib_pageSelect::getRecordOverlay returned FALSE (if
537 no translation is found), a fatal error occured:
538 PHP Catchable Fatal Error: Argument 2 passed to Tx_Extbase_Persistence_Mapper_DataMapper::getTargetType()
539 must be an array, boolean given, called in Persistence/Mapper/DataMapper.php
541 Full Changes for 1.3.0 Beta 4:
542 ==============================
544 [+TASK] Extbase (Tests): Fixed a repository unit test so that it works in CLI mode
545 [+TASK] Extbase (Tests): Fixed Extbase unit tests
546 [+BUGFIX] Extbase (Persistence): Hidden Records in Workspaces now work
547 [~TASK] Extbase: Fixed line endings (Windows to Unix).
548 [~TASK] Fluid (Tests): Fixed some more testcase class names and some unit tests
549 [+FEATURE] Extbase (Utility): Add support for custom specify custom plugin icon. Resolves #11179
551 Changes for 1.3.0 Beta 3:
552 =========================
553 included in TYPO3 4.5.0 Beta 3.
555 This release features numerous stability improvements, the biggest one
556 being a re-written core of the Object Manager, such that Lifecycle Methods
557 are supported now. This means, that a method "initializeObject()" gets called
558 as soon as all dependencies are injected and initialized.
560 Additionally, Extbase didn't work in all cases in the TYPO3 Backend. This has
561 also been improved, so Extbase (again) works in the backend
562 with an empty page tree.
564 Full Changes for 1.3.0 Beta 3:
565 =============================
567 [+BUGFIX] Extbase (Tests): Fixed Tx_Extbase_MVC_Controller_AbstractController_testcase. Thanks to Oliver Klee. Resolves #11567.
568 [BUGFIX] Extbase (Configuration): Make Extbase work again in Backend
569 [!!!][+TASK] Extbase (Object): Rewritten Object Container
570 [+BUGFIX] Extbase (MVC): Improve Exception message
571 If one misses the @dontvalidate annotation, he will
572 get a strange error which does not have a hint that
573 the @dontvalidate is missing. Now, the exception message
574 is extended.
575 [+API] Extbase (Configuration): Adding getContentObject to API
576 [+TASK] Extbase (Reflection): Added deprecation annotation to ObjectAccess::getAccessiblePropertyNames()
577 To stay in sync with FLOW3, the methods getAccessibleProperties() and getAccessiblePropertyNames() to
578 getGettableProperties() and getGettablePropertyNames().
579 For compatibility reasons the old methods will stay in Extbase until version 1.5.
580 Note: you can now check wheter properties are settable as well
581 [+FEATURE] Extbase (Reflection): Tx_Extbase_Reflection_ObjectAccess supports stdClass objects now
582 I've backported the ObjectAccess class and its unit tests from FLOW3.
583 Note: FLOW3's implementation allows to specify a third argument for the
584 method getPropertyPath() in order to support Closures.
585 This part is not backported as it's not compatible with PHP < 5.3.
587 Changes for 1.3.0 Beta 2a:
588 ==========================
589 included in TYPO3 4.5.0 Beta 2.
591 This release includes a whole bunch of bugfixes and refactorings, the most important ones listed below.
592 Because the FlashMessages now use t3lib_FlashMessage, TYPO3 4.5 is MANDATORY!
594 The main changes are:
596 * Tx_Extbase_MVC_Controller_FlashMessages now internally uses the
597 t3lib_FlashMessageQueue that has been introduced with TYPO3 4.3.
598 This results in following changes:
599 - flashmessages are now treated globally, not in a per-extension-scope. As soon as you output the messages first, the session will be flushed
600 - a flashmessage is not a simple strings anymore, but consists of
601 message body and (optionally) title & severity.
602 You can specify title and severity like this:
603 $this->flashMessages->add('Your message', 'some title', t3lib_FlashMessage::WARNING);
604 - you can now output flashmessages in backend that were set from other TYPO3 classes
605 - a revised flashmessage ViewHelper allows you to render flashmessages in the style
606 of core flashmessages now (see Fluid changelog)
607 - Resolves #10821
608 * Configuration Manager can now deal with recurring FlexForm Sections (#6067)
609 * Fixed Tx_Extbase_Domain_Model_FrontendUser (and marked the old API as deprecated)
610 * Bugfixes related to Lazy Loading
612 Full Changes for 1.3.0 Beta 2a:
613 ==============================
614 [+BUGFIX] Extbase (Configuration): change the order of methods to determine the current pageId for backend modules, which is used to fetch the TS framework configuration. Fixes #11205
615 [+TASK] Extbase (Object): Make sure the class info cache is returning valid objects
616 [+BUGFIX] Extbase (Persistence): Persistence_Backend::getIdentifierByObject should work with LazyLoadingProxy
617 getIdentifierByObject should check if object is an instance of Tx_Extbase_Persistence_LazyLoadingProxy and should return the
618 identifier of the real object.
619 [+BUGFIX] Extbase (Configuration): slightly tweaked FrontendConfigurationManager (basically replaced explode() by t3lib_div::trimExplode() call)
620 [+TASK] Extbase (Tests): Added some unit tests for Backend- and FrontendConfigurationManager. To be continued
621 [+BUGFIX] Extbase (DomainObject): added default __toString method to Tx_Extbase_DomainObject_AbstractDomainObject. Thanks to Marco Huber. Resolves #8083
622 [+BUGFIX] Extbase (MVC): Fixed UriBuilder for handling LazyLoadingProxy objects as arguments. Resolves #10705
623 [+TASK] Extbase (Object): re-added Tx_Extbase_Object_Manager to gain more backwards compatibility. This class is marked deprecated and will be removed in Extbase 1.5
624 [+BUGFIX] Extbase (Tests): tweaked ObjectContainer tests. Tests are failing deliberately for now
625 The DI implementation has to be rewritten, as discussed.
626 This relates to: #11160
627 [+BUGFIX] Extbase (Domain): fixed (non-breaking) method name for getting usergroup in Tx_Extbase_Domain_Model_FrontendUser. Resolves #11019
628 [+TASK] extbase (ConfigurationManager): Made FrontendConfigurationManager parse recurring sections in flexforms right. Thanks to Franz Koch (resolves #6067)
629 [+BUGFIX] Extbase (Configuration): Slightly tweaked AbstractConfigurationManager
630 [+TASK] Extbase (Tests): Added unit tests for AbstractConfigurationManager
631 Note: the ConfigurationManager now always overrides switchableControllerActions
632 when retrieving configuration for the current plugin. Before that only happened
633 when no extensionName/pluginName was specified.
634 Additionally: It's not possible anymore to specify new controllers in
635 switchableControllerAction configuration. That was the intended behavior.
636 [+TASK] Extbase (Tests): Renamed test files from "*_testcase.php" to "*Test.php"
637 [+TASK] Extbase (Tests): Moving all Tests in "Unit" directory.
638 [+FEATURE] Extbase (MVC): add possibility to output FlashMessageQueue (Resolves #10821)
639 [+TASK] Extbase (Persistence): counting query results does not work with limit constraints (resolves #10956) Tx_Extbase_Persistence_Storage_Typo3DbBackend::getObjectCountByQuery() replaces the SELECT part
640 of a query by COUNT(*) before executing a statement.
641 This did not work as expected in some cases, e.g. the LIMIT constraint was ignored by the count query.
642 [+TASK] Extbase (Persistence): findOneBy*() methods should return NULL if no item was found (Resolves #10958)
643 [+TASK] Extbase (Core): Slightly improved error handling in bootstrap (Resolves #11055)
644 [~TASK] Extbase (Utility): Changed Tx_Extbase_Utility_TypoScript:convertPlainArrayToTypoScriptArray to self::convertPlainArrayToTypoScriptArray. Resolves #10538.
645 [+BUGFIX] Extbase (MVC): UriBuilder: use current plugin if no pluginName has been specified
646 If multiple plugins are found, that are configured to handle the specified action, Extbase
647 will throw an Exception. Now, this only happens if the *current* plugin does not contain
648 the action.
650 Changes for 1.3.0 Beta 1a:
651 ==========================
652 included in TYPO3 4.5.0 Beta 1.
654 Extbase 1.3.0 Beta 1 has a lot new and greatly improved features, and also many bugfixes.
655 The highlights are outlined below, and explained in-depth a little further down.
657 NOTE: This release brings new table definitions, so please visit the install tool or the Extension
658 Manager and update the tables of Extbase.
662 * Dependency Injection
663 * Dispatcher Refactoring & Completely re-done Configuration Manager
664 This means that Tx_Extbase_Dispatcher is now DEPRECATED!
665 Additionally, if you defined the TypoScript setup for a plugin by hand (which you should not),
666 the syntax has changed a bit there.
667 * QueryResult refactoring (needed for Fluid Widgets)
670 Additionally, the following smaller features were implemented:
672 * Configurable plugin namespaces (#8365)
673 * Automatic target page determination (#9121)
674 * Improved resolveView() mechanism
675 * Allowing plugins to be registered as new content element (#10666)
676 * Default Orderings & QuerySettings (#10319)
678 Breaking Changes:
680 * 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.
681 * fixed typo in getter and setter of Tx_Extbase_Domain_Model_FrontendUser::lastlogin
682 * 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)
684 Known issues:
686 * The Unit Tests do not fully work again, we will fix that in the next days.
687 * There might be still issues with the support of backend modules, we are working on that!
689 Dependency Injection
690 --------------------
692 Instead of creating objects through t3lib_div::makeInstance, and connecting them together manually,
693 you yan now use Dependency Injection (DI) for that. Let's give an example: If my class "Tx_Foo_Controller_MyController"
694 needs another class "Tx_Foo_Service_LoggingService", it can get an instance of the logging service
695 by Dependency Injection, by specifying the following code:
697 class Tx_Foo_Controller_MyController {
698 protected $loggingService;
700 /**
701 * @param Tx_Foo_Service_LoggingService $loggingService
702 */
703 public function injectLoggingService(Tx_Foo_Service_LoggingService $loggingService) {
704 $this->loggingService = $loggingService;
705 }
706 }
708 The DI container finds that the class "MyController" has an method whose name starts with "inject",
709 and thus passes the logging service to MyController.
710 It is important that you can *only retrieve Singletons* through the inject annotations. If you need
711 to instanciate a prototype object, it is important to *not* use t3lib_div::makeInstance() anymore
712 (as it bypasses the DI container), but instead you need to inject the ObjectManager, and ask it
713 to create your prototype object using the create() method. Example:
715 class Tx_Foo_Controller_MyController {
716 protected $logFile;
718 /**
719 * @param Tx_Extbase_Object_ObjectManagerInterface $objectManager
720 */
721 public function injectObjectManager(Tx_Extbase_Object_ObjectManagerInterface $objectManager) {
722 $this->logFile = $objectManager->create('Tx_Foo_Domain_Model_LogFile');
723 }
724 }
726 In the above example, you have seen that we reference not the concrete implementation *ObjectManager*,
727 but instead the *ObjectManagerInterface*. If a name ends with "...Interface", Extbase DI automatically
728 strips away the "Interface" from the name, and expects to find a concrete implementation of that interface.
729 This is generally a very good practice: For your core classes, you should always reference an *interface*,
730 and let the DI container instanciate the concrete class.
732 Additionally, Extbase DI allows to *replace* certain implementation classes by other classes through
733 configuration in TypoScript. Let's give an example, and then you can see the concept:
735 config.tx_extbase.objects {
736 Tx_Extbase_Persistence_Storage_BackendInterface {
737 className = Tx_Extbase_Persistence_Storage_Typo3DbBackend
738 }
739 }
741 This essentially means to the DI container: "At all places where you encounter a "BackendInterface",
742 you should instanciate the "Typo3DbBackend" class."
744 However, note that this setting can only be configured *globally* right now, it is not possible
745 to override that on a per-extension basis.
747 Generally, the Extbase DI container provides a subset of the functionality of FLOW3's dependency injection.
749 Dispatcher Refactoring & Completely re-done Configuration Manager
750 -----------------------------------------------------------------
752 In the last versions of Extbase, the Dispatcher (Tx_Extbase_Dispatcher) was the main entry point to Extbase.
753 However, as we did not have Dependency Injection at that point, it became really complex and did lots of things
754 which it should not do in the first place. That's why we greatly improved that part. Now, any Extbase extension
755 is invoked using the Tx_Extbase_Core_Bootstrap. Additionally, the TypoScript used for the registration of any
756 Extbase extension has been cleaned up and adjusted:
758 lib.foo = USER
759 lib.foo {
760 userFunc = tx_extbase_core_bootstrap->run
761 extensionName = YourExtension
762 pluginName = YourPlugin
763 }
765 Additionally, you can also override the list of Switchable Controller Actions through TypoScript:
767 lib.foo = USER
768 lib.foo {
769 userFunc = tx_extbase_core_bootstrap->run
770 extensionName = YourExtension
771 pluginName = YourPlugin
772 switchableControllerActions {
773 Standard {
774 1 = action2
775 2 = action3
776 }
777 }
778 }
780 Of course, you cannot call actions which were not defined previously in the plugin; so the Switchable
781 Controller Actions in TypoScript can be only used to shrink the number of actions available.
783 NOTE: If you manually defined the above snippet, notice that there is a NON-BACKWARDS-COMPATIBLE change
784 in there. But you did that at your own risk, as that was never public API ;)
786 If you used Tx_Extbase_Dispatcher before in your own code, it should still work, but it is deprecated.
787 Instead, instead
789 OLD: Tx_Extbase_Dispatcher::getConfigurationManager()
790 NEW: inject Tx_Extbase_Configuration_ConfigurationManagerInterface into your class
792 OLD: Tx_Extbase_Dispatcher::getPersistenceManager()
793 NEW: inject Tx_Extbase_Persistence_ManagerInterface into your class
795 OLD: Tx_Extbase_Dispatcher::getExtbaseFrameworkConfiguration()
796 NEW: inject Tx_Extbase_Configuration_ConfigurationManagerInterface into your class,
797 and call $configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
798 on the ConfigurationManager.
800 Please note that the Configuration Manager is STILL NO PUBLIC API, and its method signature has also changed.
802 QueryResult refactoring (needed for Fluid Widgets)
803 --------------------------------------------------
805 Before this change, a call of $query->execute() inside a repository immediately executed the query and
806 returned the result as array.
807 Now, queries are executed lazily at the first moment where you really need them. This means that $query->execute()
808 returns an object of type Tx_Extbase_Persistence_QueryResultInterface, which behaves like an array, meaning you
809 can use foreach() to loop over the query result.
810 However, due to an inconsistency of PHP, the array_* methods, and the iteration methods like current(),
811 next(), ... do NOT work on objects which implement ArrayAccess -- that's the reason why the QueryResult
812 refactoring is a breaking change.
814 Now, however, the following is possible:
815 * Return the first query result: $query->execute()->getFirst()
816 * Get the underlying query: $query->execute()->getQuery()
817 * Convert the result to array: $query->execute()->toArray()
819 This change is a prerequisite for Fluid Widgets to work. See the Fluid ChangeLog for details.
822 Configurable Plugin Namespaces
823 ------------------------------
825 By default each Extbase plugin has a unique URI prefix to avoid collisions with other plugins on your website.
826 This so called plugin namespace usually has the format tx_yourextension_yourplugin.
827 With Extbase 1.3 it is possible to override this namespace. This comes in handy if want to interact with 3rd party
828 extensions, for example with tt_news:
830 plugin.tx_yourextension.view.pluginNamespace = tx_ttnews
832 This sets the plugin namespace of all your plugins inside the extension to "tx_ttnews", making it possibl
833 to directly access tt_news parameters in your controller:
835 /**
836 * @param integer $tt_news tt_news Article uid
837 * @return void
838 */
839 public function yourAction($tt_news) {
840 // interact with $tt_news uid
841 }
843 This works with automatic mapping to Domain models too of course:
845 /**
846 * @param Tx_YourExtension_Domain_Model_NewsArticle $tt_news tt_news Article
847 * @return void
848 */
849 public function yourAction(Tx_YourExtension_Domain_Model_NewsArticle $tt_news) {
850 // interact with $tt_news object
851 }
853 You can also override the plugin namespace for a single instance by adding the section <view.pluginNamespace> to your
854 plugin FlexForm.
857 Automatic target page determination
858 -----------------------------------
860 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
861 the need to specify target pages from within your Extension. Of course you can put all your functionality into one fully
862 fledged plugin, then you won't have to deal with target pages as the current page is used by default.
864 But sometimes you want to be able to change the surrounding contents of a special view of your extension (e.g. the
865 subcontent column of a details page). As before you can still specify the target page explicitly like:
867 <f:link.action action="foo" pageUid="123" />
869 With Extbase 1.3 you can also use a new feature called "automatic target page determination". It is disabled by default,
870 but you can enable it with the following TypoScript:
872 plugin.tx_yourextension.view.defaultPid = auto
874 Then Extbase will search the page tree for a plugin that is configured to handle the specified action and you can omit
875 the "pageUid" parameter in your links. Of course, this does not work if you use the same plugin multiple times in your
876 page tree. In this case you can override the default page ID for the respective plugins:
878 plugin.tx_yourextension_yourplugin.view.defaultPid = 123
880 Note: By default this feature is not activated, because that would be a breaking change in some cases
883 Improved resolveView() mechanism
884 --------------------------------
886 Another feature we backported from FLOW3 is the improved view resolving.
887 You can now change the default view implementation *per format* by inserting the following line in your Controller:
889 protected $viewFormatToObjectNameMap = array(
890 'json' => 'Tx_YourExtension_View_JsonView',
891 'html' => 'Tx_YourExtension_View_HtmlView'
892 );
895 Allowing plugins to be registered as new content element
896 --------------------------------------------------------
898 This is done using an additional parameter to Tx_Extbase_Utility_Extension::configurePlugin
899 that allows you to specify the plugin type. Example:
901 Tx_Extbase_Utility_Extension::configurePlugin(
902 $_EXTKEY,
903 'BlogList',
904 array('Blog' => 'index'),
905 array(),
906 Tx_Extbase_Utility_Extension::PLUGIN_TYPE_CONTENT_ELEMENT
907 );
908 (The default value for the pluginType parameter is Tx_Extbase_Utility_Extension::PLUGIN_TYPE_PLUGIN)
910 Default Orderings & QuerySettings
911 ---------------------------------
913 It is now possible to change the default orderings of a repository without you having to modify the query by setting
914 the $defaultOrderings property of your Repository to a non-empty array:
916 protected $defaultOrderings = array(
917 'title' => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING,
918 'date' => 'title' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING
919 );
921 This will change the default ordering for all queries created by this repository. Of course you can override the
922 ordering by calling $query->setOrderings() in your custom finder method.
924 Besides it's now possible to change the default query settings of a repository. This way you could for instance disable
925 "respect storage pid" for all queries. We added a life-cycle method "initializeObject" to the repository which will be
926 executed as soon as the repository is created. Just override it like the following:
928 public function initializeObject() {
929 $querySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings');
930 $querySettings->setRespectStoragePage(FALSE);
931 $this->setDefaultQuerySettings($querySettings);
932 }
934 Of course, QuerySettings can be overridden too in your custom finder method by calling $query->setQuerySettings();
937 Full Changes for 1.3.0 Beta 1a:
938 ===============================
939 [+TASK] Extbase: Re-implement support for BE modules
940 [+FEATURE] Extbase (Utility): Allow plugins to be registered as new content element
941 Added a fifth parameter to Tx_Extbase_Utility_Extension::configurePlugin that allows
942 you to specify the plugin type (currently "list_type" and "CType" are supported).
943 Thanks to Marc Bastian Heinrichs, Rens Admiraal & Franz Koch for your help!
944 Resolves: #10666
945 [+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
946 [!!!][~TASK] Extbase (Configuration): Major rework of the ConfigurationManager
947 Configuration of controllers and actions is now stored in a global registry
948 ($GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']). But you
949 should never access this directly. Instead always retrieve the frameworkConfiguration
950 from the ConfigurationManager.
951 Inserting an Extbase plugin is now as simple as:
952 lib.foo = USER
953 lib.foo {
954 userFunc = tx_extbase_core_bootstrap->run
955 extensionName = YourExtension
956 pluginName = YourPlugin
957 }
958 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().
959 NOTE: Unit tests of Extbase and Fluid v4 are broken currently. We'll be fixing those asap
960 [~TAKS] Extbase (MVC): FrontendRequestHandler now retrieves the current cObject through the ConfigurationManager
961 [+BUGFIX] Extbase (MVC): FrontendRequestHandler was refering to $this->frameworkConfiguration which wasn't available
962 [-API] Extbase (MVC): marked Tx_Extbase_MVC_Web_Request::getContentObjectData() deprecated as should retrieve the current cObject through the ConfigurationManager
963 [+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
964 [+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)
965 [~TASK] Extbase (Core): The Flashmessages now get persisted in the Bootstrap in resetSingletons()
966 [-TASK] Extbase (Core): Removed some commented lines from Bootstrap
967 [FEATURE] Extbase (Object): Make DI Class Mapping configurable through TS
968 It is now possible to configure the Dependency Injection class mapping by specifying:
969 config.tx_extbase.objects.[FullyQualifiedObjectName].className = [NewClassName]
970 This has the effect of effectively replacing [FullyQualifiedObjectName] with
971 [NewClassName].
972 Resolves: #10559
973 [-TASK] Extbase (Utility): Removed two obsolete checks for $GLOBALS['TSFE']->tmpl->setup['tt_content.']['list.']['20.'] in Tx_Extbase_Utility_Extension
974 [~TASK] Extbase: added two doc comments that were missing
975 [+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
976 [+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())
977 [+BUGFIX] Extbase (Persistence): Replaced two occurrences of Query->count() by Query->execute()->count() to avoid deprecated warnings in the Core
978 [+BUGFIX] Extbase (MVC): view configuration (templateRootPath, ...) has to be set before View::canRender() is called
979 [!!!][+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.
980 [+BUGFIX] Extbase (Reflection): ReflectionService now uses a cacheIdentifier per Extension. Besides the Bootstrap now resets the ReflectionService after dispatching a request. This resolves #10146
981 [+TASK] Extbase (Configuration): The ConfigurationManager now holds the current cObject. You can retrieve it via ConfigurationManagerInterface::getContentObject()
982 [+BUGFIX] Extbase (Configuration): When loading configuration of other plugins, the context specific configuration (e.g. flexform settings) are no longer merged with the frameworkConfiguration
983 [+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
984 [+TASK] Extbase (Persistence): QuerySettings now also store the storage page id(s). This is required for the upcoming Ajax Widgets
985 [+BUGFIX] Extbase: fixed php warning in Tx_Extbase_Persistence_LazyLoadingProxy when loading the real instance would return NULL. Resolves #10683
986 [+BUGFIX] Extbase: use 3rd parameter = TRUE of t3lib_div::trimExplode to split switchableControllerActionParts from flexform. Thanks to Georg Ringer. Resolves #10688
987 [+TASK] Extbase: Replaced "public static" by "static public" in various places to be CGL conform
988 [+TASK] Extbase: Marked Utitlity_Extension camelCase/underscore helper functions deprecated
989 [+TASK] Extbase: Removed obsolete FIXME comments, whitespace fixes
990 [!!!] Extbase: Reintegrating branch "dispatcher" to trunk. Resolves: #10605
991 Branch history:
992 [+FEATURE] Extbase (Configuration): Extend ConfigurationManager so that it can load configuration of different plugins
993 [+FEATURE] Extbase (Configuration): 1st level cache for ConfigurationManager. Resolves: #10717. Resolves: #10716
994 [+TASK] Extbase: cleaned up Configuration* implementation, replaced t3lib_div::makeInstance() calls
995 Streamlined ConfigurationManager API and enforced its usage throughout the Extbase classes.
996 Replaced all t3lib_div::makeInstance() calls by $objectManager->create()/$objectManager->get() throughout the Extbase classes.
997 Some smaller tweaks and fixes. Resolves: #10655. Resolves: #10712
998 [TASK] Extbase (Object): Make tests work again. Resolves: #10709
999 [TASK] Extbase (Object): Updated autoload.php and emconf. Relates to: #10561
1000 [TASK] Extbase (Object): Use typed exceptions. Relates to: #10561
1001 [TASK] Extbase (Object): CGL cleanup
1002 Additionally, removed support for @inject annotations at methods. Relates to: #10561
1003 [TASK] Extbase (Object): Remove getParents. Relates to: #10561
1004 [TASK] Extbase (Object): Remove isSingleton. Relates to: #10561
1005 [TASK] Extbase (Object): Remove injectExtensionSettings feature. Relates to: #10561
1006 [TASK] Extbase (Object): Change namespaces to Tx_Extbase_Object_Container. Relates to: #10561
1007 [TASK] Extbase (Object): Add Container to Extbase. Relates to: #10561
1008 [+TASK] Extbase (Core): moved Tx_Extbase_Bootstrap to Tx_Extbase_Core_Bootstrap
1009 Moving Bootstrap to be compliant with FLOW3
1010 Removed obsolete Classes. Resolves: #10704
1011 [+TASK] Extbase: Merged current trunk (r2689) with local modifications into dispatcher branch
1012 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
1013 [+TASK] Extbase (Configuration): Moved CONFIGURATION_TYPE_* constraints to ConfigurationManagerInterface. Resolves #10604.
1014 [~TASK] Extbase (Configuration): The concrete configuration management strategy gets instanciate only once now.
1015 [+FEATURE] Extbase (MVC): Decoupled framework settings from Dispatcher.
1016 With the new dependency injection feature you can get the Configuration Manager injected by adding the lines
1017 protected $configurationManager;
1018 public function injectConfigurationManager(Tx_Extbase_Configuration_ConfigurationManagerInterface $configurationManager) {
1019 $this->configurationManager = $configurationManager;
1020 }
1021 You can get various types of configuration invoking
1022 $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManager::CONFIGURATION_TYPE_EXTBASE)
1023 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.
1024 [~TAKS] Extbase: Removed obsolete code.
1025 [~TASK] Extbase: Added core patch for mod.php (see previous commit).
1026 [+TASK] Extbase: Changed the way a module gets called.
1027 - You can now specify a function name to be invoked by mod.php:
1028 $TBE_MODULES['_dispatcher'][] = 'Tx_Extbase_Bootstrap->callModule';
1029 - This requires a core patch.
1030 [~TASK] Extbase: Changed configuration of the RequestHandler class names to TypoScript.
1031 - The request handlers can now be registered in TypoScript with the setting:
1032 config.tx_extbase.mvc.requestHandlers.[RequestHandlerClassName] = [RequestHandlerClassName].
1033 - There are now two RequestHandlers in Extbase: FrontendRequestHandler and BackendRequestHandler. Common functionality is in the AbstractRequestHandler.
1034 [+API][+FEATURE] Extbase (Utility): Implemented mechanism to register RequestHandlers.
1035 [+TASK] Extbase: Backported Request Handler Resolver.
1036 [~TASK] Extbase: Added "deprecated" annotation to Dispatcher.
1037 [~TASK] Extbase: Added missing comment.
1038 [+BUGFIX] Extbase (Reflection): The ReflectionService now gets injected to the dispatcher. Related to #10146.
1039 [+BUGFIX] Extbase (Reflection): Changed the way the Reflection Service and it's cache gets initialized.
1040 * Removed check for pre-initialized Reflection Service in the Bootstrap.
1041 * Now using a fixed cache key ('ReflectionData').
1042 Related to #10146.
1043 [~TASK] Extbase: First step of the Dispatcher refactoring.
1044 * Added and adapted some Unit Tests.
1045 * Moved the Dispatcher to MVC.
1046 * Added a backwards compatibility Dispatcher on root level.
1047 * Added a Bootstrap class.
1048 * Removed all backend module support for now.
1049 Related to #7153.
1050 [+TASK] Extbase: Added branch for the dispatcher refactoring.
1051 [!!!][+BUGFIX] Extbase: fixed typo in getter and setter of Tx_Extbase_Domain_Model_FrontendUser::lastlogin . Thanks to Christian Schwan. Resolves #9345
1052 [+FEATURE] Extbase (MVC): Backport possibility to change the view object class name more easily
1053 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.
1054 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
1055 Resolves: #8990
1056 [!!!][+FEATURE] Extbase (Persistence): Backport QueryResult from FLOW3
1057 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).
1058 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.
1059 Resolves: #10566
1060 [+BUGFIX] Extbase (Object): Minor fix in ObjectManager to make it compatible with PHP 5.2.x
1061 Relates to: #9062
1062 [+BUGFIX] Extbase (Object): Refactor Object Manager
1063 The Object Manager is now at the same location and
1064 has the same API as in FLOW3.
1065 [+BUGFIX] Extbase: Major cleanups to Dependency Injection and Persistence
1066 Now, DI finally works with Persistence, cleaning
1067 this greatly up. Additionally, all internal
1068 t3lib_div::makeInstance calls have been replaced.
1069 Now, dependency injection is actually usable.
1070 Additionally, we completely thought over which
1071 persistence classes need to be singleton and which
1072 should be prototype, leading finally to a
1073 coherent design in the persistence layer.
1074 [+BUGFIX] Extbase: remove non-used interfaces
1075 Removed classes which were not used.
1076 Relates to: #9062
1077 Resolves: #10585
1078 Resolves: #10564
1079 * Cleaned up Persistence Backend
1080 * Cleaned up QOM Factory
1081 [+BUGFIX] Extbase (MVC): Fix arguments object
1082 The arguments object is now correctly inheriting from ArrayObject
1083 Resolves: #10562
1084 [+BUGFIX] Extbase (MVC): Make database connection work again
1085 Resolves: #10585
1086 [+FEATURE] Extbase (DI): merging DI into trunk. (resolves #10558)
1087 [+TASK] Extbase: Undefined identifier in Tx_Extbase_Persistence_Storage_Typo3DbBackend::removeRow
1088 Method clearPageCache was given an undefined variable $uid as second parameter.
1089 Resolves: #10570
1090 [+TASK] Extbase: $query->contains generate incomplete SQL
1091 Use FIND_IN_SET instead of a self-constructed query of LIKE statements
1092 Resolves: #8959
1093 [+BUGFIX] Extbase (Persistence): Removed method createQuery from the QOMFactory. It is neither part of the API nor is it used by Extbase. Resolves #10215
1094 [+BUGFIX] Extbase (Property): Minor fix in PHP doc comment
1095 Fix the order of @param annotation in Tx_Extbase_Property_Mapper::mapAndValidate()
1096 Resolves: #5887
1097 [~CONFIGURATION] Extbase (MVC): Changed default value for automatic target page determination
1098 The page id gets automatically detected if plugin.tx_extensionname_pluginname.view.defaultPid
1099 is an empty string (was "auto" before). This ensures backwards compatibility.
1100 Resolves #9121
1101 [TASK] Extbase: moved Release Notes to ChangeLog.txt.
1102 [+FEATURE] Extbase (MVC): Automatic target page determination
1103 you can use the "pageUid" argument of the link.* and uri.* view helpers
1104 to link to a different page. That is deprecated though as we won't have
1105 the notion of "page uids" in v5. Instead the target page is now determined
1106 automatically.
1107 If the target page can't be determined because more than one active
1108 plugin is capable of handling the action an exception will be thrown.
1109 In that case you'll have to define the target page either by using the
1110 pageUid argument or - preferably - by setting
1111 plugin.tx_extensionname_pluginname.view.defaultPid to a fixed page uid.
1112 Note: This feature still has to be documented!
1113 Resolves: #9121
1114 [+FEATURE] Extbase (MVC): Configurable plugin namespace
1115 until now the namespace (aka prefix) of Extbase plugins was
1116 fixed (tx_extensionname_pluginname). This is now configurable
1117 via TypoScript. Just write:
1118 plugin.tx_extensionname_pluginname.view.pluginNamespace = my_custom_namespace
1119 to change the prefix for a specific plugin or
1120 plugin.tx_extensionname.view.pluginNamespace = my_custom_namespace
1121 to change if for the whole extension.
1122 Note: This feature still has to be documented!
1123 Resolves: #8365
1125 Changes for 1.3.0 Alpha 2:
1126 ==========================
1127 included in TYPO3 4.5.0 Alpha 2.
1129 Since the last version, one (possible BREAKING) change happened:
1131 * Fixed Extbase Caching Bug.
1132 Non-cacheable actions were cached due to the fact that TYPO3s
1133 TypoScript condition "GP" does not merge GET & POST vars.
1134 Additionally "switchableControllerActions" that were overridden
1135 in the plugin flexform were not taken into account.
1137 !!! This is a breaking change if you set up your TS configuration
1138 of the plugin manually.
1140 Full Changes:
1141 -------------
1143 [!!!][+BUGFIX] Extbase: Fix Extbase Caching Bug (thanks to Bastian Waidelich)
1145 [-TASK] Extbase (MVC): removed fallback to current page in AbstractController::redirect() as that's already done within the UriBuilder if $targetPageUid is NULL
1148 Changes for 1.3.0 Alpha 1:
1149 ==========================
1150 included in TYPO3 4.5.0 Alpha 1.
1152 Since the last version, the following notable things happened:
1154 * 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.
1155 * Performance improvements in TypoScript::convertTypoScriptArrayToPlainArray. Thanks to Timo Schmidt.
1156 * Numerous other bugfixes, see below.
1158 Full Changes:
1159 -------------
1160 [~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.
1161 [+TASK] Extbase (MVC): cleaned up View implementations and added assign() and assignMultiple() methods to ViewInterface. This resolves #9137
1162 [+BUGFIX] Extbase: Fixed a small typo in extension description.
1163 [+BUGFIX] Extbase (Persistence): DataMapper now mapps NULL into a property on non-existing related object instead of FALSE. Resolves #8973.
1164 [+BUGFIX] Extbase (Reflection): getParentClass() in Tx_Extbase_Reflection_ClassReflection no longer causes a fatal error if no parent class exists. Resolves #8800.
1165 [+BUGFIX] Extbase (Utility): Improved performance of TypoScript::convertTypoScriptArrayToPlainArray. Thanks to Timo Schmidt. Resolves #8857.
1166 [~TASK] Extbase: Changed state to 'stable'. Resolves #8768.
1167 [+BUGFIX] Extbase: Fixed EOL and encoding of several files. Resolves #8876.
1168 [+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.
1169 [!!!][+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.
1170 [+BUGFIX] Extbase (Persistence): Fixed a problem where localized objects inside an aggregate are not translated. Resolves #8555.
1171 [~TASK] Extbase: Removed new lines at the end of php files.
1173 RELEASE NOTES of Extbase v1.0.0
1174 ===============================
1176 This package contains the Extbase Framework for Extensions. You may
1177 also want to install the BlogExample (blog_example) to experiment
1178 with. This little example extension demonstrates some of the main
1179 features of Extbase. The documentation is bundled in a separate
1180 extension called doc_extbase. Both, the blog_example and the
1181 doc_extbase can downloaded via TER.
1183 http://typo3.org/extensions/repository/view/blog_example/current/
1184 http://typo3.org/extensions/repository/view/doc_extbase/current/
1186 Currently Extbase is in ALPHA state. Do not expect everything in the
1187 right place and shape. And keep in mind that the API may change
1188 until TYPO3 v4.3beta1 is released.
1190 If you have any feature requests or encountered issues regarding
1191 this package please use the facilities on forge to report.
1193 We are very open to answer your questions. Please use the newsgroup
1195 typo3.projects.typo3v4mvc on lists.netfielders.de
1197 so other developers can react to your comments and also
1198 profit from the postet solutions. Do not contact a member of the
1199 development team via private email (or skype, or visits, or ...)
1200 until he accepted this channel. We all do coding for Extbase on
1201 our sparetime and must handle our regular work load - and don't
1202 forget about our families ;-).
1204 We hope you have fun with this package!
1206 -- Your Extbase Development Team
1209 ===========================
1210 git log [startRevision]..HEAD --pretty=format:"%s%n%b%n" | grep -v "^$" | grep -v "git-svn-id"
1212 Verify that the merge into the Core succeeded:
1213 diff -urNw --exclude=".git" --exclude=".svn" -I "@version" ../../../typo3/sysext/extbase/ .