Разделить обязанности классов, осуществляющих загрузку файлов

Статус
В этой теме нельзя размещать новые ответы.

Духовность™

Продвинутый новичок
Скажите, как думаете, клас для загрузки файла должен уметь обнаруживать и возвращать ошибки или его задача (в рамках php) исключительно сделать красивый/корректный copy в нужную директоию?

У меня сейчас абстрактный уплоад-класс. Он обладает функционалом обнаруживать стандартные ошибки.
PHP:
class Abstract ...

    /**
     * Конкретный метод класса-наследника должен включить в данный метод
     * те методы проверок на ошибки, которые ему нужны.
     * На данный момент существуют следующие методы проверок на ошибки:
     *
     * $this->checkUpload() - проверяет, был ли загружен файл.
     * $this->checkSize() - проверка на допустимый размер загружаемого файла.
     * $this->checkMimeType() - проверка на mime-тип.
     * $this->checkOtherErrors() - проверка на ошибку неполной загрузки файла.
     *
     * @param  void
     * @return void
     */
    abstract protected function checkErrors();

Это правильное решение?
 

Redjik

Джедай-мастер
Ошибки - нет, только если хочется дополнительную проверку на слишком большой / маленький.
 

Духовность™

Продвинутый новичок

Redjik

Джедай-мастер
Все зависит как всегда от общей картины.

Например, если нам нужны чисто картинки, то логичнее все эти проверки отдать классу обработки изображений.

С другой стороны в yii в модели есть валидатор, для всех этих дел.

Как следствие - проверку только от ошибки HTTP. И базовый копипаст функцинал.
А дальше уже отдельный класс обработки файла.
 

caballero

Новичок
А «класс для загрузки файлов» звучит как кусок процедурного программирования.
Потому что здесь отсутствует объектно-ориентированное программирование. Наличие классов в программе еще не
делает ее ООП.
 

Adelf

Administrator
Команда форума
caballero
Спасибо, что объяснил. С первого раза мы не поняли. :)
 

Ragazzo

TDD interested
К слову говоря, в Yii тоже можно в модели формы сделать поле, типа file, ну и соотвественно валидатор для него тоже стандартный.
 

Духовность™

Продвинутый новичок
Потому что здесь отсутствует объектно-ориентированное программирование. Наличие классов в программе еще не
делает ее ООП.
Присутствует, КО. Инкапсуляция - слышал такое слово? Так что не надо ля-ля.

PHP:
$upload = new UploadService($_FILES['img']);
$upload->setMaxFileSize('1M')
		->setAllowableMimeType('image/jpeg', 'image/jpeg', 'image/gif', 'image/png', 'image/pjpeg', 'image/x-png');
if ($upload->isFileUpload()) {
	if ($upload->hasMimeTypeErrors()) {
		$errors[] = 'Загруженный файл имеет недопустимый mime-тип';
	} else if ($upload->hasPartialUploadErrors()) {
		$errors[] = 'Загруженный файл загружен частично';
	} else if ($size = $upload->hasFileSizeErrors()) {
		$errors[] = 'Загруженный файл имеет недопустимый размер, допустимый размер — ' . createPhpFormatBytes($size);
	}
}

if ($upload->isFileUpload()) {
	try {
		$upload->setFileName($sectionInfo->section->id);
		$upload->copy($img_path);
	} catch (Exception $e) {
		trigger_error($e->getMessage(), E_USER_WARNING);
	}
}
 

Adelf

Administrator
Команда форума
PHP:
'image/jpeg', 'image/jpeg'
Типа - "не понял, повтори"?

Духовность™
Я так понял ты вручную формы в контроллере обрабатываешь?
У меня тоже есть подобный обьект. Правда он картинки сразу режет как сконфигурено.. и в контроллере ничего такого нет. Работает как поле для форм.
 

Adelf

Administrator
Команда форума
Духовность™
Вот ты код привел. Где он находится? В каком классе? Контроллера?
Вручную - это когда в каждом контроллере вручную контроллишь поведение формы. А еще бывает просто создаешь объект формы(с настройками - поля, валидация и т.д.) и там уже рулится все "само".
 

Духовность™

Продвинутый новичок
Adelf
да. у нас где я работаю нет архитектуры, код 10-и летней давности. что привязались.

и там уже рулится все "само".
у меня так в моем личном коде почти такой же принцип при проверке текстовых полей.
 

caballero

Новичок
мальчик ты адекватный?
во первых я старше тебя
во вторых нельзя спрашивать как должен функционировать класс приводя выдраный кусок кода
который ни о чем не говорит.
 

Adelf

Administrator
Команда форума
Тема закрыта.

Проблемы личного характера и бессмысленные споры между участниками не являются предметом обсуждения форума.
Обсуждайте их в привате.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху