Neos\FluidAdaptor\ViewHelpers\Uri\ResourceViewHelper::render PHP Method

render() public method

Render the URI to the resource. The filename is used from child content.
public render ( string $path = null, string $package = null, PersistentResource $resource = null, boolean $localize = true ) : string
$path string The location of the resource, can be either a path relative to the Public resource directory of the package or a resource://... URI
$package string Target package key. If not set, the current package key will be used
$resource Neos\Flow\ResourceManagement\PersistentResource If specified, this resource object is used instead of the path and package information
$localize boolean Whether resource localization should be attempted or not
return string The absolute URI to the resource
    public function render($path = null, $package = null, PersistentResource $resource = null, $localize = true)
    {
        if ($resource !== null) {
            $uri = $this->resourceManager->getPublicPersistentResourceUri($resource);
            if ($uri === false) {
                $uri = '404-Resource-Not-Found';
            }
        } else {
            if ($path === null) {
                throw new InvalidVariableException('The ResourceViewHelper did neither contain a valuable "resource" nor "path" argument.', 1353512742);
            }
            if ($package === null) {
                $package = $this->controllerContext->getRequest()->getControllerPackageKey();
            }
            if (strpos($path, 'resource://') === 0) {
                try {
                    list($package, $path) = $this->resourceManager->getPackageAndPathByPublicPath($path);
                } catch (Exception $exception) {
                    throw new InvalidVariableException(sprintf('The specified path "%s" does not point to a public resource.', $path), 1386458851);
                }
            }
            if ($localize === true) {
                $resourcePath = 'resource://' . $package . '/Public/' . $path;
                $localizedResourcePathData = $this->i18nService->getLocalizedFilename($resourcePath);
                $matches = array();
                if (preg_match('#resource://([^/]+)/Public/(.*)#', current($localizedResourcePathData), $matches) === 1) {
                    $package = $matches[1];
                    $path = $matches[2];
                }
            }
            $uri = $this->resourceManager->getPublicPackageResourceUri($package, $path);
        }
        return $uri;
    }

Usage Example

 /**
  * @test
  * @expectedException \Neos\FluidAdaptor\Core\ViewHelper\Exception\InvalidVariableException
  */
 public function renderThrowsExceptionIfResourceUriNotPointingToPublicWasGivenAsPath()
 {
     $this->mockResourceManager->expects($this->once())->method('getPackageAndPathByPublicPath')->with('resource://Some.Package/Private/foobar.txt')->willThrowException(new Exception());
     $this->viewHelper->render('resource://Some.Package/Private/foobar.txt', 'SomePackage');
 }
ResourceViewHelper