[!!!][TASK] Don't guess extension name by looking at controller name 23/59623/5
authorAlexander Schnitzler <git@alexanderschnitzler.de>
Sat, 2 Feb 2019 14:15:42 +0000 (15:15 +0100)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Fri, 1 Mar 2019 17:48:06 +0000 (18:48 +0100)
\TYPO3\CMS\Extbase\Mvc\Controller\AbstractController::$extensionName
had been set in the constructor by looking at the controller class
name and guessing the extension name by removing parts of the
class namespace.

Since the extension name is known when registering plugins and modules,
the extension name will no longer be guessed in the constructor but
can be fetched from the request object.

Releases: master
Resolves: #87627
Change-Id: I307275861003f7e6bd37e76a77658c283a9b2bd2
Reviewed-on: https://review.typo3.org/c/59623
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Daniel Goerz <daniel.goerz@posteo.de>
Tested-by: Jürgen Venne <venne@schaffrath-digital.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Daniel Goerz <daniel.goerz@posteo.de>
Reviewed-by: Oliver Klee <typo3-coding@oliverklee.de>
Reviewed-by: Jürgen Venne <venne@schaffrath-digital.de>
Reviewed-by: Andreas Fernandez <a.fernandez@scripting-base.de>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/core/Documentation/Changelog/master/Breaking-87627-RemovePropertyExtensionNameOfAbstractController.rst [new file with mode: 0644]
typo3/sysext/extbase/Classes/Mvc/Controller/AbstractController.php
typo3/sysext/extbase/Tests/Fixture/DummyController.php [deleted file]

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-87627-RemovePropertyExtensionNameOfAbstractController.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-87627-RemovePropertyExtensionNameOfAbstractController.rst
new file mode 100644 (file)
index 0000000..a6f7b38
--- /dev/null
@@ -0,0 +1,37 @@
+.. include:: ../../Includes.txt
+
+======================================================================
+Breaking: #87627 - Remove Property extensionName of AbstractController
+======================================================================
+
+See :issue:`87627`
+
+Description
+===========
+
+:php:`\TYPO3\CMS\Extbase\Mvc\Controller\AbstractController::$extensionName`
+has been removed and is no longer available in subclasses of
+:php:`\TYPO3\CMS\Extbase\Mvc\Controller\AbstractController`, i.e.
+:php:`\TYPO3\CMS\Extbase\Mvc\Controller\ActionController` and their derivates.
+
+
+Impact
+======
+
+Accessing the missing property :php:`$extensionName` will throw a fatal error.
+
+
+Affected Installations
+======================
+
+All installations that read from :php:`\TYPO3\CMS\Extbase\Mvc\Controller\AbstractController::$extensionName`
+
+
+Migration
+=========
+
+The extension name is set in and available through the request object that is attached to the controller.
+See :php:`\TYPO3\CMS\Extbase\Mvc\Controller\AbstractController::$request` and :php:`\TYPO3\CMS\Extbase\Mvc\Request::getControllerExtensionName()`
+for more information.
+
+.. index:: PHP-API, NotScanned, ext:extbase
index 183686a..8f9e261 100644 (file)
@@ -40,11 +40,6 @@ abstract class AbstractController implements ControllerInterface
     protected $uriBuilder;
 
     /**
-     * @var string Key of the extension this controller belongs to
-     */
-    protected $extensionName;
-
-    /**
      * Contains the settings of the current extension
      *
      * @var array
@@ -119,27 +114,6 @@ abstract class AbstractController implements ControllerInterface
     protected $configurationManager;
 
     /**
-     * Constructs the controller.
-     */
-    public function __construct()
-    {
-        // this functionality is actually not needed any more.
-        // the extension name is known during the creation of request objects and if the extension name was
-        // needed, then it were to be fetched by the request object. The controller object shouldn't care about
-        // the extension that uses it.
-        // todo: decide whether to drop this now or along with the property or if to keep that to not break the public api
-
-        $className = static::class;
-        $classNameParts = explode('\\', $className, 4);
-        // Skip vendor and product name for core classes
-        if (strpos($className, 'TYPO3\\CMS\\') === 0) {
-            $this->extensionName = $classNameParts[2];
-        } else {
-            $this->extensionName = $classNameParts[1];
-        }
-    }
-
-    /**
      * @param ConfigurationManagerInterface $configurationManager
      */
     public function injectConfigurationManager(ConfigurationManagerInterface $configurationManager)
diff --git a/typo3/sysext/extbase/Tests/Fixture/DummyController.php b/typo3/sysext/extbase/Tests/Fixture/DummyController.php
deleted file mode 100644 (file)
index 1c7ee8e..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-namespace TYPO3\CMS\Extbase\Tests\Fixture;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-use TYPO3\CMS\Extbase\Mvc\Controller\AbstractController;
-
-/**
- * Fixture implements get extension name method.
- */
-class DummyController extends AbstractController
-{
-    /**
-     * @return string
-     */
-    public function getExtensionName()
-    {
-        return $this->extensionName;
-    }
-}