[BUGFIX] Fix getTemplatePathAndFilename on StandaloneView 21/51021/7
authorClaus Due <claus@namelesscoder.net>
Thu, 22 Dec 2016 12:28:46 +0000 (13:28 +0100)
committerChristian Kuhn <lolli@schwarzbu.ch>
Sun, 4 Jun 2017 11:43:53 +0000 (13:43 +0200)
This patch avoids calling a non-existing method and instead calls
upon TemplatePaths to resolve the template file - which is closer
to the original behavior.

Change-Id: Ib2669056e59bf1a6524e35e02e1f677226a5efa5
Resolves: #79073
Releases: master, 8.7
Reviewed-on: https://review.typo3.org/51021
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Markus Sommer <markussom@posteo.de>
Tested-by: Markus Sommer <markussom@posteo.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/fluid/Classes/View/StandaloneView.php

index f354a17..97a0f5d 100644 (file)
@@ -138,19 +138,23 @@ class StandaloneView extends AbstractTemplateView
     }
 
     /**
-     * Returns the absolute path to a Fluid template file if it was specified with setTemplatePathAndFilename() before
+     * Returns the absolute path to a Fluid template file if it was specified with setTemplatePathAndFilename() before.
+     * If the template filename was never specified, Fluid attempts to resolve the file based on controller and action.
+     *
+     * NB: If TemplatePaths was previously told to use the specific template path and filename it will short-circuit
+     * and return that template path and filename directly, instead of attempting to resolve it.
      *
      * @return string Fluid template path
-     * @throws \RuntimeException
      * @api
      */
     public function getTemplatePathAndFilename()
     {
         $templatePaths = $this->baseRenderingContext->getTemplatePaths();
-        if ($templatePaths instanceof TemplatePaths) {
-            return $templatePaths->getTemplatePathAndFilename();
-        }
-        throw new \RuntimeException('The template paths storage must be of type ' . TemplatePaths::class, 1482251889);
+        return $templatePaths->resolveTemplateFileForControllerAndActionAndFormat(
+            $this->baseRenderingContext->getControllerName(),
+            $this->baseRenderingContext->getControllerAction(),
+            $templatePaths->getFormat()
+        );
     }
 
     /**