atom-azimov/uploader-bundle

Installs: 159

Dependents: 0

Suggesters: 0

Security: 0

Stars: 14

Watchers: 5

Forks: 4

Type:symfony-bundle

1.0.8 2017-03-18 02:03 UTC

This package is not auto-updated.

Last update: 2020-08-07 20:03:20 UTC


README

Symfony пакет, который обеспечивает сохранение загруженных файлов.

Build Status Gitter Slack Status Dependency Status Code Climate

GitHub license Latest Stable Version Latest Unstable Version Total Downloads SensioLabsInsight

Мотивация

Проект создавался с целью облегчить загрузку файлов, используя встраиваемые объекты doctrine. Но он не зависит от doctrine и его можно использовать с другими хранилищами данных, даже с простыми массивами.

Возможности

  • Автоматическое создание имён и сохранение файлов;
  • Внедрение файла обратно в объект, когда он будет загружен из хранилища данных, как экземпляр \SplFileInfo;
  • Внедрение URI в объект, когда он будет загружен из хранилища данных;
  • Удаление файла из файловой системы при удалении (или обновлении) объекта из хранилища данных.

Весь функционал настраиваемый.

Неиспользуемые сервисы удаляются на этапе оптимизации DIC, а используемые сервисы инициализируются только тогда, когда они понадобятся.

Быстрый старт

Быстрый старт подходит для RAD разработки Для более гибкого использования читайте документацию

Установка

composer require atom-php/uploader-bundle

Включение

# app/AppKernel.php
public function registerBundles()
{
    $bundles = [
        ...
        new Atom\UploaderBundle\AtomUploaderBundle(),
        ...
    ];
}

Использование

AtomUploaderBundle представляет собой готовый встраиваемый объект для быстрой разработки.

Просто встройте его в сущность:

# src/Entity/User.php

namespace Acme\Entity;

use Doctrine\ORM\Mapping\Embedded;

class User
{
    ...

    /**
     * @Embedded(class="Atom\Uploader\Model\Embeddable\FileReference")
     */
    private $avatar;
}

Готово! Теперь прикреплённые файлы автоматически сохраняются в файловой системе, по умолчанию в "%kernel.root_dir%/../web/uploads"

Примеры

Сохранение загруженного файла
$file = // экземпляр \SplFileInfo
$em = // entity manager

$avatar = new Atom\Uploader\Model\Embeddable\FileReference($file);

$user = new Acme\Entity\User();
$user->setAvatar($avatar);

// Генерируется имя файла и сохраняется в файловой системы.
$em->persist($user);

// Если все хорошо то ничего не делается, иначе файл удаляется.
$em->flush();
Обновление
$file = // экземпляр \SplFileInfo
$user = // экземпляр Acme\Entity\User
$avatar = new Atom\Uploader\Model\Embeddable\FileReference($file);
$user->setAvatar($avatar);

// Генерируется имя файла и сохраняется в файловой системы.
// Удаляется старый файл если имя файла не совпадает с новым.
$em->flush();
Получение
// внедряется URI и информация о файле.
$user = $em->find('Acme\Entity\User', 1);

Внедрение информации о файле (\SplFileInfo) по умолчанию отключено, его можно включить в config.yml:

atom_uploader:
    mappings:
        Atom\Uploader\Model\Embeddable\FileReference:
            inject_file_info_on_load: true
Удаление
$user = // экземпляр Acme\Entity\User

$em->setAvatar(null);
// или
$em->remove($user);

// Файл удаляется.
$em->flush();

Документация

См. src/Resources/doc/ru/index.md

Внести свой вклад в развитие проекта

См. contributing_ru.md