*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\Templating\Helper;
use Symfony\Component\Templating\Asset\PackageInterface;
/**
* CoreAssetsHelper helps manage asset URLs.
*
* Usage:
*
*
*
*
*
* @author Fabien Potencier
* @author Kris Wallsmith
*/
class CoreAssetsHelper extends Helper implements PackageInterface
{
protected $defaultPackage;
protected $namedPackages = array();
/**
* Constructor.
*
* @param PackageInterface $defaultPackage The default package
* @param array $namedPackages Additional packages indexed by name
*/
public function __construct(PackageInterface $defaultPackage, array $namedPackages = array())
{
$this->defaultPackage = $defaultPackage;
foreach ($namedPackages as $name => $package) {
$this->addPackage($name, $package);
}
}
/**
* Sets the default package.
*
* @param PackageInterface $defaultPackage The default package
*/
public function setDefaultPackage(PackageInterface $defaultPackage)
{
$this->defaultPackage = $defaultPackage;
}
/**
* Adds an asset package to the helper.
*
* @param string $name The package name
* @param PackageInterface $package The package
*/
public function addPackage($name, PackageInterface $package)
{
$this->namedPackages[$name] = $package;
}
/**
* Returns an asset package.
*
* @param string $name The name of the package or null for the default package
*
* @return PackageInterface An asset package
*
* @throws \InvalidArgumentException If there is no package by that name
*/
public function getPackage($name = null)
{
if (null === $name) {
return $this->defaultPackage;
}
if (!isset($this->namedPackages[$name])) {
throw new \InvalidArgumentException(sprintf('There is no "%s" asset package.', $name));
}
return $this->namedPackages[$name];
}
/**
* Gets the version to add to public URL.
*
* @param string $packageName A package name
*
* @return string The current version
*/
public function getVersion($packageName = null)
{
return $this->getPackage($packageName)->getVersion();
}
/**
* Returns the public path.
*
* Absolute paths (i.e. http://...) are returned unmodified.
*
* @param string $path A public path
* @param string $packageName The name of the asset package to use
*
* @return string A public path which takes into account the base path and URL path
*/
public function getUrl($path, $packageName = null)
{
return $this->getPackage($packageName)->getUrl($path);
}
/**
* Returns the canonical name of this helper.
*
* @return string The canonical name
*/
public function getName()
{
return 'assets';
}
}