<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\View\File;
use Magento\Framework\View\File;
use Magento\Framework\View\File\FileList\CollateInterface;
/**
* Unordered list of view file instances with awareness of view file identity
*/
class FileList
{
/**
* Array of files
*
* @var File[]
*/
protected $files = [];
/**
* Collator
*
* @var \Magento\Framework\View\File\FileList\CollateInterface
*/
protected $collator;
/**
* Constructor
*
* @param \Magento\Framework\View\File\FileList\CollateInterface $collator
*/
public function __construct(CollateInterface $collator)
{
$this->collator = $collator;
}
/**
* Retrieve all view file instances
*
* @return File[]
*/
public function getAll()
{
return array_values($this->files);
}
/**
* Add view file instances to the list, preventing identity coincidence
*
* @param \Magento\Framework\View\File[] $files
* @return void
* @throws \LogicException
*/
public function add(array $files)
{
foreach ($files as $file) {
$identifier = $file->getFileIdentifier();
if (array_key_exists($identifier, $this->files)) {
$filename = $this->files[$identifier]->getFilename();
throw new \LogicException(
"View file '{$file->getFilename()}' is indistinguishable from the file '{$filename}'."
);
}
$this->files[$identifier] = $file;
}
}
/**
* Replace already added view files with specified ones, checking for identity match
*
* @param File[] $files
* @return void
*/
public function replace(array $files)
{
$this->files = $this->collator->collate($files, $this->files);
}
}
|