Neos\Flow\Mvc\ActionRequest::getReferringRequest PHP Метод

getReferringRequest() публичный Метод

The referring request is not set or determined automatically but must be explicitly set through the corresponding internal argument "__referrer". This mechanism is used by Flow's form and validation mechanisms.
public getReferringRequest ( ) : ActionRequest
Результат ActionRequest the referring request, or NULL if no referrer found
    public function getReferringRequest()
    {
        if ($this->referringRequest !== null) {
            return $this->referringRequest;
        }
        if (!isset($this->internalArguments['__referrer'])) {
            return null;
        }
        if (is_array($this->internalArguments['__referrer'])) {
            $referrerArray = $this->internalArguments['__referrer'];
            $referringRequest = new ActionRequest($this->getHttpRequest());
            $arguments = [];
            if (isset($referrerArray['arguments'])) {
                $serializedArgumentsWithHmac = $referrerArray['arguments'];
                $serializedArguments = $this->hashService->validateAndStripHmac($serializedArgumentsWithHmac);
                $arguments = unserialize(base64_decode($serializedArguments));
                unset($referrerArray['arguments']);
            }
            $referringRequest->setArguments(Arrays::arrayMergeRecursiveOverrule($arguments, $referrerArray));
            return $referringRequest;
        } else {
            $this->referringRequest = $this->internalArguments['__referrer'];
        }
        return $this->referringRequest;
    }

Usage Example

 /**
  * @test
  * @expectedException \Neos\Flow\Security\Exception\InvalidHashException
  */
 public function getReferringRequestThrowsAnExceptionIfTheHmacOfTheArgumentsCouldNotBeValid()
 {
     $serializedArguments = base64_encode('some manipulated arguments string without valid HMAC');
     $referrer = ['@controller' => 'Foo', '@action' => 'bar', 'arguments' => $serializedArguments];
     $mockHashService = $this->getMockBuilder(HashService::class)->getMock();
     $mockHashService->expects($this->once())->method('validateAndStripHmac')->with($serializedArguments)->will($this->throwException(new InvalidHashException()));
     $this->inject($this->actionRequest, 'hashService', $mockHashService);
     $this->actionRequest->setArgument('__referrer', $referrer);
     $this->actionRequest->getReferringRequest();
 }