ramzes, ну в "научных кругах" такой контролёр описывается "Фасадом", который создается над пачкой файлов и предоставляет единый интерфейс работы с хранилищем.
К примеру что то такое:
<?php
class FileStorageFacade{
/**
* @var string Адрес каталога хранилища.
*/
private $dir;
/**
* @var Validator[] Валидаторы, применяемые к загружаемым файлам.
*/
private $validators;
/**
* @var FileEditor Редакторы файлов.
*/
private $editors;
/**
* @param string $dir Адрес каталога хранилища.
*/
public function __construct($dir){
$this->dir = $dir;
$this->validators = [];
$this->editors = [];
}
// Getters and Setters
public function addValidator($validator){
$this->validators[] = $validator;
}
public function addEditor($editor){
$this->editors[] = $editor;
}
/**
* @param string $file Адрес перемещаемого в хранилище файла.
*
* @return string Идентификатор перемещенного файла.
*/
public function moveIn($file){
if(!file_exists($file)){
throw new RuntimeException('Target file not found');
}
// Проверка добавляемого файла.
foreach($this->validators as $validator){
if(!$validator->isValid($file)){
throw new RuntimeException('Invalid file');
}
}
$id = $this->generateId();
rename($file, $this->dir . '/' . $id);
// Тут лучше еще записать инфу о файле в базу.
// Изменение добавленного файла.
foreach($this->editors as $editor){
$editor->edit($file);
}
return $id;
}
/**
* @param UploadedFile $file Загружаемый в хранилище файл.
*/
public function uploadIn(UploadedFile $file){
$this->moveIn($file->getFile());
}
/**
* @param string $id Идентификатор целевого файла.
*
* @return string Адрес файла в хранилище.
*/
public function at($id){
$path = $this->dir . '/' . $id;
if(!file_exists($path)){
return null;
}
return $path;
}
// Other
/**
* @return string Новый идентификатор в хранилище.
*/
protected function generateId(){
return (string) rand(1000, 9999); // Конечно нужно что то посерьезнее
}
}
?>