Существуют ли различия между File
и Storage
фасадами в laravel 5.2?
кажется, что они оба используют один и тот же контракт. В документации laravel нет документации для File
.
если они разные, как могут взаимодействовать друг с другом?
Файл Laravel vs Хранение фасада
Ответ 1
Файл - довольно простая оболочка для функций PHP, таких как file_exists() и т.д. Хранение - это "мощная абстракция файловой системы благодаря замечательному пакету Flysystem PHP от Frank de Jonge". Это можно использовать для локальных файлов (т.е. Storage::disk('local')->exists('path')
).
До Laravel 5 у Laravel не было интеграции Flysystem. В то время фасад файла был "способ" взаимодействовать (локальные файлы). Я бы предположил, что документация для Файла удалена, чтобы пользователи вместо этого использовали хранилище. Файловая система действительно работает.
Ответ 2
Файловый фасад просто содержит некоторые примитивные методы, которые работают только с абсолютным путем или относительно вашего скрипта:
-
\File::makeDirectory('/home/www/myProject/storage/app/uploads/14214');
-
\File::copy('/home/www/myProject/storage/app/uploads/14214/test.json', '/home/www/myProject/storage/app/uploads/99999/test.json');
Storage Facade содержит набор сложных методов и является оберткой для других сторонних инструментов.
Первое преимущество заключается в том, что вы можете использовать относительный путь к папке:
-
Storage::makeDirectory('uploads/14214');
-
Storage::copy('uploads/14214/test.json', 'uploads/99999/test.json');
Вы можете изменить папку по умолчанию /storage/app
в config/filesystems.php
или создать другие диски, которые вы можете вызвать с помощью Storage::disk('specialxyz')->copy(...)
.
Также вы можете сохранить raw file contents
в файл следующим образом:
-
Storage::put('file.jpg', $contents);
И мой любимый, это очень легко загружать пользовательские файлы с помощью
$path = Storage::putFile('avatars', $request->file('avatar'));
или же
$path = $request->file('avatar')->store('avatars');
По умолчанию метод store генерирует уникальный идентификатор в качестве имени файла. Расширение файла будет определено путем изучения типа файла MIME. Путь к файлу будет возвращен методом store, чтобы вы могли сохранить путь, включая сгенерированное имя файла, в вашей базе данных.