@bizzonaru

Yii2 Есть ли готовое расширение, которое бы позволяло загружаемые файлы (фото) раскладывать в иерархическую папку?

То есть, само автоматически создает папку - год, затем месяц, день. Генерировало произвольное имя загружаемого файла.
  • Вопрос задан
  • 627 просмотров
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Это слишком простая задача для отдельного расширения, однако эта логика может быть реализована, как часть какого-то расширения.
Для произвольного имени достаточно использовать
$name = md5(strtotime("now").rand(1000,9999));
А папки делаются с помощью fileHelper - www.yiiframework.com/doc-2.0/yii-helpers-basefileh...

Наверняка можно найти поведение для yii для загрузки фото, которое либо будет это уметь, либо можно кастомизировать за 2 строки кода, например https://github.com/mohorev/yii2-upload-behavior
или вот тут покапайтесь
https://github.com/search?utf8=✓&q=yii2+image+behavior
https://github.com/search?utf8=✓&q=yii2+upload+beh...
Ответ написан
@kucheriavij
public static function fromUpload($name, $deleteAfter = true)
	{
		$webroot = Yii::getAlias('@webroot');
		$uploadImage = UploadedFile::getInstanceByName($name);

		$instance = new Image();
		$instance->ext = pathinfo($uploadImage->name, PATHINFO_EXTENSION);
		$instance->title = basename($uploadImage->name);
		$instance->size = $uploadImage->size;
		if ($instance->size == 0)
			return null;

		if ($instance->save()) {
			$url = strtr('/media/images/{date}/{id}/{file}', ['{date}' => date('Y/m/d'), '{id}' => $instance->id, '{file}' => $uploadImage->name]);
			$destPath = $webroot . $url;
			FileHelper::createDirectory(dirname($destPath), 0777);

			if ($uploadImage->saveAs($destPath, $deleteAfter)) {
				list($width, $height) = self::dimension($destPath);
				$instance->setAttributes([
					'url' => $url,
					'width' => $width,
					'height' => $height,
					'mime' => $uploadImage->type,
					'name' => $uploadImage->name,
					'title' => '',
				]);
				$instance->update(false);
				return $instance;
			} else {
				$instance->delete();
				return null;
			}
		}
		return null;
	}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы