# Delphinum (22.08.2016 / 23:32)
Ну тем более если не важно ООП и сложность, делайте просто с помощью какого нить "Божественного класса", который будет за все это отвечать.
его будет трудно модифицировать, и убирать, в случае критических конфликтов класса и движка же
тут уже есть один такой "божественный" класс, этот самый, пресловутый, аплоад
# ramzes (22.08.2016 / 23:14)
че то посмотрел немножко, уже хочется к своему пару идей добавить заимствованных оттуда)
интересная штука
тоже рассматривал когда то этот класс, он у меня на локале года три уже валяется Гг
тот простой класс который когда то предлагал
https://github.com/aivis/PHP-f ... class
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); // Конечно нужно что то посерьезнее
}
}
?>
AlkatraZ, если таки применяется весь Zend, то у него на борту все есть ) Да, остается только фасады понаписать к нему.
# Delphinum (22.08.2016 / 23:56)
AlkatraZ, если таки применяется весь Zend, то у него на борту все есть )
Нет, не весь, а отдельные пакеты, те, что нужны.
AlkatraZ, подтяните тогда уж зендовый
diactoros, в нем есть реализация UploadedFile согласно PSR7
# Delphinum (23.08.2016 / 00:03)
AlkatraZ, подтяните тогда уж зендовый diactoros, в нем есть реализация UploadedFile согласно PSR7
Это давно запилено в mobiCMS, а в Джоне этого не будет, нет смысла.
Delphinum, если хранить в бд то придется каждый старт вычитывать таблицу, а файлов могут быть многие тысячи
мне показалось это черезмерно напряжным, была мысль сделать альтернативную функцию генерации имени_сохранения на основе пути к файлу или его мд5хешу (появится возможность проверки дублирования файла на основе хеша).
но мысль привлекательная в целом
ramzes, если нужна ранняя оптимизация, используйте кеши.