*/ abstract class BaseAsset implements AssetInterface { private $filters; private $sourceUrl; private $targetUrl; private $content; private $loaded; /** * Constructor. * * @param array $filters Filters for the asset * @param string $sourceUrl The source URL */ public function __construct($filters = array(), $sourceUrl = null) { $this->filters = new FilterCollection($filters); $this->sourceUrl = $sourceUrl; } public function ensureFilter(FilterInterface $filter) { $this->filters->ensure($filter); } public function getFilters() { return $this->filters->all(); } /** * Encapsulates asset loading logic. * * @param string $content The asset content * @param FilterInterface $additionalFilter An additional filter */ protected function doLoad($content, FilterInterface $additionalFilter = null) { $filter = clone $this->filters; if ($additionalFilter) { $filter->ensure($additionalFilter); } $asset = clone $this; $asset->setContent($content); $filter->filterLoad($asset); $this->content = $asset->getContent(); $this->loaded = true; } public function dump(FilterInterface $additionalFilter = null) { if (!$this->loaded) { $this->load(); } $filter = clone $this->filters; if ($additionalFilter) { $filter->ensure($additionalFilter); } $asset = clone $this; $filter->filterDump($asset); return $asset->getContent(); } public function getContent() { return $this->content; } public function setContent($content) { $this->content = $content; } public function getSourceUrl() { return $this->sourceUrl; } public function getTargetUrl() { return $this->targetUrl; } public function setTargetUrl($targetUrl) { $this->targetUrl = $targetUrl; } }