protected function forward($actionName, $controllerName = null, $packageKey = null, array $arguments = [])
{
$nextRequest = clone $this->request;
$nextRequest->setControllerActionName($actionName);
if ($controllerName !== null) {
$nextRequest->setControllerName($controllerName);
}
if ($packageKey !== null && strpos($packageKey, '\\') !== false) {
list($packageKey, $subpackageKey) = explode('\\', $packageKey, 2);
} else {
$subpackageKey = null;
}
if ($packageKey !== null) {
$nextRequest->setControllerPackageKey($packageKey);
$nextRequest->setControllerSubpackageKey($subpackageKey);
}
$regularArguments = [];
foreach ($arguments as $argumentName => $argumentValue) {
if (substr($argumentName, 0, 2) === '__') {
$nextRequest->setArgument($argumentName, $argumentValue);
} else {
$regularArguments[$argumentName] = $argumentValue;
}
}
$nextRequest->setArguments($this->persistenceManager->convertObjectsToIdentityArrays($regularArguments));
$this->arguments->removeAll();
$forwardException = new ForwardException();
$forwardException->setNextRequest($nextRequest);
throw $forwardException;
}