Simplify working with Asset Manager in Handlebars helpers

This commit is contained in:
Dmitriy Simushev 2015-03-19 09:55:58 +00:00
parent db702e43c9
commit 9fef4b2871
3 changed files with 41 additions and 72 deletions

View File

@ -120,20 +120,6 @@ abstract class AbstractController implements
public function setAssetManager(AssetManagerInterface $manager) public function setAssetManager(AssetManagerInterface $manager)
{ {
$this->assetManager = $manager; $this->assetManager = $manager;
// Update URL generator in the style helpers
if (!is_null($this->style) && $this->style instanceof HandlebarsAwareInterface) {
$handlebars = $this->style->getHandlebars();
if ($handlebars->hasHelper('asset')) {
$handlebars->getHelper('asset')->setAssetUrlGenerator($manager->getUrlGenerator());
}
if ($handlebars->hasHelper('jsAssets')) {
$handlebars->getHelper('jsAssets')->setAssetManager($manager);
}
if ($handlebars->hasHelper('cssAssets')) {
$handlebars->getHelper('cssAssets')->setAssetManager($manager);
}
}
} }
/** /**
@ -358,18 +344,12 @@ abstract class AbstractController implements
$hbs->addHelper( $hbs->addHelper(
'asset', 'asset',
new AssetHelper( new AssetHelper(
$this->getAssetManager()->getUrlGenerator(), $this,
array('CurrentStyle' => $style->getFilesPath()) array('CurrentStyle' => $style->getFilesPath())
) )
); );
$hbs->addHelper( $hbs->addHelper('jsAssets', new JsAssetsHelper($this));
'jsAssets', $hbs->addHelper('cssAssets', new CssAssetsHelper($this));
new JsAssetsHelper($this->getAssetManager())
);
$hbs->addHelper(
'cssAssets',
new CssAssetsHelper($this->getAssetManager())
);
} }
return $style; return $style;

View File

@ -29,37 +29,22 @@ use Mibew\Asset\AssetManagerInterface;
/** /**
* Contains for basic functionality for all helpers which renders assets lists. * Contains for basic functionality for all helpers which renders assets lists.
*/ */
abstract class AbstractAssetsHelper implements HelperInterface, AssetManagerAwareInterface abstract class AbstractAssetsHelper implements HelperInterface
{ {
/** /**
* @var AssetManagerInterface|null * @var AssetManagerAwareInterface|null
*/ */
protected $manager = null; protected $assetManagerContainer = null;
/** /**
* Class constructor. * Class constructor.
* *
* @param AssetUrlGeneratorInterface $manager An instance of Asset Manager. * @param AssetManagerAwareInterface $manager_container An object which know
* where to get an appropriate Asset Manager.
*/ */
public function __construct(AssetManagerInterface $manager) public function __construct(AssetManagerAwareInterface $manager_container)
{ {
$this->manager = $manager; $this->assetManagerContainer = $manager_container;
}
/**
* {@inheritdoc}
*/
public function getAssetManager()
{
return $this->manager;
}
/**
* {@inheritdoc}
*/
public function setAssetManager(AssetManagerInterface $manager)
{
$this->manager = $manager;
} }
/** /**
@ -95,6 +80,17 @@ abstract class AbstractAssetsHelper implements HelperInterface, AssetManagerAwar
return new SafeString(implode("\n", $buffer)); return new SafeString(implode("\n", $buffer));
} }
/**
* Extracts asset manager from the asset manager's container related with
* the object.
*
* @return AssetManagerInterface
*/
protected function getAssetManager()
{
return $this->assetManagerContainer->getAssetManager();
}
/** /**
* Renders URL of an asset. * Renders URL of an asset.
* *

View File

@ -22,6 +22,7 @@ namespace Mibew\Handlebars\Helper;
use Handlebars\Context; use Handlebars\Context;
use Handlebars\Helper as HelperInterface; use Handlebars\Helper as HelperInterface;
use Handlebars\Template; use Handlebars\Template;
use Mibew\Asset\AssetManagerAwareInterface;
use Mibew\Asset\Generator\UrlGeneratorInterface as AssetUrlGeneratorInterface; use Mibew\Asset\Generator\UrlGeneratorInterface as AssetUrlGeneratorInterface;
/** /**
@ -36,7 +37,7 @@ use Mibew\Asset\Generator\UrlGeneratorInterface as AssetUrlGeneratorInterface;
* paths. Lets assume that the following array is passed to the constructor: * paths. Lets assume that the following array is passed to the constructor:
* <code> * <code>
* $helper = new AssetHelper( * $helper = new AssetHelper(
* $generator, * $asset_manager_container,
* array('CustomStorage' => 'custom/files/storage') * array('CustomStorage' => 'custom/files/storage')
* ); * );
* </code> * </code>
@ -54,22 +55,23 @@ class AssetHelper implements HelperInterface
protected $locations = null; protected $locations = null;
/** /**
* @var AssetUrlGeneratorInterface|null * @var AssetManagerAwareInterface|null
*/ */
protected $generator = null; protected $assetManagerContainer = null;
/** /**
* Class constructor. * Class constructor.
* *
* @param AssetUrlGeneratorInterface $generator An instance of URL generator * @param AssetManagerAwareInterface $manager_container An object which
* knows where to get an appropriate Asset Manager.
* @param array $locations Associative array of locations that can be used * @param array $locations Associative array of locations that can be used
* as prefixes for asset relative paths. The keys are prefixes and the * as prefixes for asset relative paths. The keys are prefixes and the
* values are locations relative paths. These paths must not content * values are locations relative paths. These paths must not content
* neither leading nor trailing slashes. * neither leading nor trailing slashes.
*/ */
public function __construct(AssetUrlGeneratorInterface $generator, $locations = array()) public function __construct(AssetManagerAwareInterface $manager_container, $locations = array())
{ {
$this->generator = $generator; $this->assetManagerContainer = $manager_container;
// Strip slashes from location paths. // Strip slashes from location paths.
foreach ($locations as $name => $path) { foreach ($locations as $name => $path) {
@ -77,26 +79,6 @@ class AssetHelper implements HelperInterface
} }
} }
/**
* Gets instance of Asset URL Generator.
*
* @return AssetUrlGeneratorInterface
*/
public function getAssetUrlGenerator()
{
return $this->generator;
}
/**
* Sets an instance of Asset URL Generator.
*
* @param AssetUrlGeneratorInterface $generator
*/
public function setAssetUrlGenerator(AssetUrlGeneratorInterface $generator)
{
$this->generator = $generator;
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
@ -120,7 +102,18 @@ class AssetHelper implements HelperInterface
); );
} }
return $this->generator->generate($relative_path); return $this->getAssetUrlGenerator()->generate($relative_path);
}
/**
* Extracts an instance of Asset URL Generator from the Asset Manager
* container related with the object.
*
* @return AssetUrlGeneratorInterface
*/
protected function getAssetUrlGenerator()
{
return $this->assetManagerContainer->getAssetManager()->getUrlGenerator();
} }
/** /**