[BUGFIX] Fix handling of ClosureFinisher
[Packages/TYPO3.CMS.git] / typo3 / sysext / form / Classes / Domain / Finishers / AbstractFinisher.php
index 79b818c..5c011fd 100644 (file)
@@ -78,8 +78,21 @@ abstract class AbstractFinisher implements FinisherInterface
     }
 
     /**
+     * @param string $finisherIdentifier The identifier for this finisher
+     */
+    public function __construct(string $finisherIdentifier = '')
+    {
+        if (empty($finisherIdentifier)) {
+            $this->finisherIdentifier = (new \ReflectionClass($this))->getShortName();
+        } else {
+            $this->finisherIdentifier = $finisherIdentifier;
+        }
+
+        $this->shortFinisherIdentifier = preg_replace('/Finisher$/', '', $this->finisherIdentifier);
+    }
+
+    /**
      * @param array $options configuration options in the format ['option1' => 'value1', 'option2' => 'value2', ...]
-     * @return void
      * @api
      */
     public function setOptions(array $options)
@@ -92,7 +105,6 @@ abstract class AbstractFinisher implements FinisherInterface
      *
      * @param string $optionName name of the option to be set
      * @param mixed $optionValue value of the option
-     * @return void
      * @api
      */
     public function setOption(string $optionName, $optionValue)
@@ -104,13 +116,10 @@ abstract class AbstractFinisher implements FinisherInterface
      * Executes the finisher
      *
      * @param FinisherContext $finisherContext The Finisher context that contains the current Form Runtime and Response
-     * @return void
      * @api
      */
     final public function execute(FinisherContext $finisherContext)
     {
-        $this->finisherIdentifier = (new \ReflectionClass($this))->getShortName();
-        $this->shortFinisherIdentifier = preg_replace('/Finisher$/', '', $this->finisherIdentifier);
         $this->finisherContext = $finisherContext;
         $this->executeInternal();
     }
@@ -120,7 +129,6 @@ abstract class AbstractFinisher implements FinisherInterface
      *
      * Override and fill with your own implementation!
      *
-     * @return void
      * @api
      */
     abstract protected function executeInternal();
@@ -166,6 +174,10 @@ abstract class AbstractFinisher implements FinisherInterface
             return $optionValue;
         }
 
+        if ($optionValue instanceof \Closure) {
+            return $optionValue;
+        }
+
         $formRuntime = $this->finisherContext->getFormRuntime();
 
         // You can encapsulate a option value with {}.