[FEATURE] Display the bad class name in makeInstance 72/36472/2
authorOliver Klee <typo3-coding@oliverklee.de>
Fri, 30 Jan 2015 19:53:19 +0000 (20:53 +0100)
committerBenjamin Mack <benni@typo3.org>
Fri, 30 Jan 2015 21:38:51 +0000 (22:38 +0100)
The class name provided to GeneralUtility::makeInstance must not
start with a backslash. To help track down the offending code parts,
makeInstance now includes the offending class name in the exception
message.

Resolves: #64665
Releases: master
Change-Id: I745840f9d6497b0b73bd2f1872310728e780ae5e
Reviewed-on: http://review.typo3.org/36472
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Benjamin Mack <benni@typo3.org>
Tested-by: Benjamin Mack <benni@typo3.org>
typo3/sysext/core/Classes/Utility/GeneralUtility.php

index cef1a2b..c95caa1 100755 (executable)
@@ -4340,9 +4340,11 @@ Connection: close
         * GeneralUtility::makeInstance() first and call its get() method to get
         * the instance of a specific class.
         *
-        * @throws \InvalidArgumentException if classname is an empty string
-        * @param string $className name of the class to instantiate, must not be empty
+        * @param string $className name of the class to instantiate, must not be empty and not start with a backslash
+        *
         * @return object the created instance
+        *
+        * @throws \InvalidArgumentException if $className is empty or starts with a backslash
         */
        static public function makeInstance($className) {
                if (!is_string($className) || empty($className)) {
@@ -4350,7 +4352,9 @@ Connection: close
                }
                // Never instantiate with a beginning backslash, otherwise things like singletons won't work.
                if ($className[0] === '\\') {
-                       throw new \InvalidArgumentException('$className must not start with a backslash.', 1420281366);
+                       throw new \InvalidArgumentException(
+                               '$className "' . $className . '" must not start with a backslash.', 1420281366
+                       );
                }
                if (isset(static::$finalClassNameCache[$className])) {
                        $finalClassName = static::$finalClassNameCache[$className];