Я давно хотел чаще писать о новостях разработки, и сейчас отличное время начать!
На этой неделе я добавил в Spark загрузку фото профиля и управление им. Добавление этой функции заставило меня немного глубже погрузиться в интеграцию Laravel с Flysystem и в классы для загрузки, поскольку Forge и Envoyer не поддерживают загрузку файлов.
Один из упрощённых мной процессов — получение URL файла, сохранённого в Flysystem в открытом виде. Для адаптера AWS это довольно простая задача, поскольку в AWS SDK есть метод для получения URL.
Но для локального адаптера у нас нет никаких договорённостей о том, где хранить загруженные файлы пользователей. Более того, хранение загрузок в общедоступной папке не очень хорошо сказывается на решениях, обновляющихся на лету, таких как Envoyer.
При использовании таких систем развёртывания, как Envoyer, при каждом развёртывании устанавливается полностью новая копия репозитория, а папка хранилища прикрепляется к постоянному хранилищу символьной ссылкой. Если вы храните загрузки пользователей в общедоступной папке, то все они пропадут при последующих развёртываниях. Решение в том, чтобы хранить загрузки в папке постоянного хранилища и создавать символьную ссылку из общедоступной папки на папку хранилища в процессе развёртывания.
До вчерашнего дня (10.02.2016 — прим. пер.) не было определённого места для хранения загрузок пользователей, кроме «где угодно в папке хранилища». После просмотра нескольких библиотек из других языков стала очевидной необходимость определить стандартное место в папке хранилища для файлов, которые будут общедоступными. Поэтому я создал папку storage/app/public в репозитории Laravel, которая появится во всех новых установка Laravel 5.2 и выше.
Наличие в хранилище стандартного места для общедоступных файлов позволяет разработчикам пакетов и сервисов позаботиться о вашем удобстве. Например, я планирую вскоре добавить в Envoyer автоматический «хук» для создания символьной ссылки из public/storage в storage/app/public, не требуя от пользователя ручной настройки. Теперь пользовательские загрузки будут общими для разных развёртываний, и не надо будет напоминать о необходимости настройки «хука» для создания символьной ссылки при развёртывании.
Также я изменил файл настроек filesystems.php, добавил использование общедоступного диска, который хранит файлы относительно пути storage/app/public, поэтому теперь вы можете работать с файлами при помощи простого и выразительного синтаксиса:
Storage::disk('public')->put($file, $contents);