Laravel удалить файл из storage

Обновлено: 07.07.2024

Laravel обеспечивает мощную абстракцию файловой системы благодаря замечательному пакету Flysystem PHP от Фрэнка де Йонга. Интеграция Laravel с Flysystem содержит простые драйверы для работы с локальными файловыми системами, SFTP и Amazon S3. Более того, удивительно просто переключаться между этими вариантами хранения: как локального, так и производственного серверов – поскольку API остается одинаковым для каждой системы.

Конфигурирование

Файл конфигурации файловой системы Laravel находится в config/filesystems.php . В этом файле вы можете настроить все «диски» файловой системы. Каждый диск представляет собой определенный драйвер хранилища и место хранения. Примеры конфигураций для каждого поддерживаемого драйвера включены в конфигурационный файл, так что вы можете изменить конфигурацию, отражающую ваши предпочтения хранения и учетные данные.

Драйвер local взаимодействует с файлами, хранящимися локально на сервере, на котором запущено приложение Laravel, в то время как драйвер s3 используется для записи в службу облачного хранилища Amazon S3.

Вы можете настроить столько дисков, сколько захотите, и даже иметь несколько дисков, использующих один и тот же драйвер.

Локальный драйвер

При использовании драйвера local все операции с файлами выполняются относительно корневого каталога, определенного в файле конфигурации filesystems . По умолчанию это значение задано каталогом storage/app . Следовательно, следующий метод запишет файл в storage/app/example.txt :

Публичный диск

Диск public , определенный в файле конфигурации filesystems вашего приложения, предназначен для файлов, которые будут общедоступными. По умолчанию публичный диск использует драйвер local и хранит свои файлы в storage/app/public .

Чтобы сделать эти файлы доступными из интернета, вы должны создать символическую ссылку на storage/app/public в public/storage . Использование этого соглашения о папках позволит хранить ваши публичные файлы в одном каталоге, который может быть легко доступен между развертываниями при использовании систем развертывания с нулевым временем простоя, таких как Envoyer.

Чтобы создать символическую ссылку, вы можете использовать команду storage:link Artisan:

После того, как была создана символическая ссылка, вы можете создавать URL-адреса для сохраненных файлов, используя помощник asset :

Вы можете настроить дополнительные символические ссылки в файле конфигурации filesystems . Каждая из настроенных ссылок будет создана, когда вы запустите команду storage:link :

Предварительная подготовка драйверов

Пакеты Composer

Перед использованием драйверов S3 или SFTP вам необходимо установить соответствующий пакет с помощью менеджера пакетов Composer:

    Amazon S3: league/flysystem-aws-s3-v3

Кроме того, вы можете установить декоратор CachedAdapter для повышения производительности:

Конфигурирование драйвера S3

Информация о конфигурации драйвера S3 находится в вашем файле конфигурации config/filesystems.php . Этот файл содержит пример массива конфигурации для драйвера S3. Вы можете изменить этот массив своей собственной конфигурацией S3 и учетными данными. Для удобства эти переменные среды соответствуют соглашению об именах, используемому в интерфейсе командной строки AWS.

Конфигурирование драйвера FTP

Интеграция Laravel с Flysystem отлично работает с FTP; однако, пример конфигурации по умолчанию не включен в конфигурационный файл config/filesystems.php фреймворка. Если вам нужно настроить файловую систему FTP, вы можете использовать пример конфигурации ниже:

Конфигурирование драйвера SFTP

Интеграция Laravel с Flysystem отлично работает с SFTP; однако, пример конфигурации по умолчанию не включен в конфигурационный файл config/filesystems.php фреймворка. Если вам нужно настроить файловую систему SFTP, вы можете использовать пример конфигурации ниже:

Кеширование

Чтобы включить кеширование для конкретного диска, вы можете добавить директиву cache в параметры конфигурации этого диска. Параметр cache должен быть массивом параметров кеширования, содержащим имя disk , время expire в секундах и prefix кеша:

Доступ к экземплярам дисков

Фасад Storage используется для взаимодействия с любым из ваших сконфигурированных дисков. Например, вы можете использовать метод put фасада, чтобы сохранить аватар на диске по умолчанию. Если вы вызываете методы фасада Storage без предварительного вызова метода disk , то метод будет проксирован на диск по умолчанию:

Если ваше приложение взаимодействует с несколькими дисками, то вы можете использовать метод disk фасада Storage для работы с файлами на указанном диске:

Получение файлов

Метод get используется для получения содержимого файла. Необработанное строковое содержимое файла будет возвращено методом. Помните, что все пути к файлам должны быть указаны относительно «корня» диска:

Метод exists используется для определения, существует ли файл на диске:

Метод missing используется, чтобы определить, отсутствует ли файл на диске:

Скачивание файлов

URL-адреса файлов

Вы можете использовать метод url , чтобы получить URL для указанного файла. Если вы используете драйвер local , он обычно просто добавляет /storage к указанному пути и возвращает относительный URL-адрес файла. Если вы используете драйвер s3 , будет возвращен абсолютный внешний URL-адрес:

При использовании драйвера local все файлы, которые должны быть общедоступными, должны быть помещены в каталог storage/app/public . Кроме того, вы должны создать символическую ссылку в public/storage , которая указывает на каталог storage/app/public .

При использовании драйвера local возвращаемое значение url не является URL-кодированным. По этой причине мы рекомендуем всегда хранить ваши файлы, используя имена, которые будут создавать допустимые URL-адреса.

Временные URL

Используя метод temporaryUrl , вы можете создавать временные URL-адреса для файлов, хранящихся с помощью драйвера s3 . Этот метод принимает путь и экземпляр DateTime , указывающий, когда должен истечь доступ к файлу по URL:

Если вам нужно указать дополнительные параметры запроса S3, то вы можете передать массив параметров запроса в качестве третьего аргумент методу temporaryUrl :

Настройка хоста URL

Если вы хотите заранее определить хост для URL-адресов, сгенерированных с помощью фасада Storage , то вы можете добавить параметр url в массив конфигурации диска:

Метаданные файла

Помимо чтения и записи файлов, Laravel также может предоставлять информацию о самих файлах. Например, метод size используется для получения размера файла в байтах:

Метод lastModified возвращает временную метку UNIX последнего изменения файла:

Пути к файлам

Вы можете использовать метод path , чтобы получить путь к указанному файлу. Если вы используете драйвер local , он вернет абсолютный путь к файлу. Если вы используете драйвер s3 , этот метод вернет относительный путь к файлу в корзине S3 :

Хранение файлов

Метод put используется для сохранения содержимого файла на диске. Вы также можете передать resource PHP методу put , который будет использовать поддержку базового потока Flysystem. Помните, что все пути к файлам должны быть указаны относительно «корневого» расположения, настроенного для диска:

Автоматическая потоковая передача

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

Методы putFile и putFileAs также принимают аргумент для определения «видимости» сохраненного файла. Это особенно полезно, если вы храните файл на облачном диске, таком как Amazon S3, и хотите, чтобы файл был общедоступным через сгенерированные URL:

Добавление информации к файлам

Методы prepend и append позволяют записывать в начало или конец файла, соответственно:

Копирование и перемещение файлов

Метод copy используется для копирования существующего файла в новое место на диске, а метод move используется для переименования или перемещения существующего файла в новое место:

Загрузка файлов

В веб-приложениях одним из наиболее распространенных вариантов хранения файлов является хранение загруженных пользователем файлов, таких как фотографии и документы. Laravel упрощает хранение загруженных файлов с помощью метода store экземпляра загружаемого файла. Вызовите метод store , указав путь, по которому вы хотите сохранить загруженный файл:

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

Вы также можете вызвать метод putFile фасада Storage , чтобы выполнить ту же операцию сохранения файлов, что и в примере выше:

Указание имени файла

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

Вы также можете использовать метод putFileAs фасада Storage , который будет выполнять ту же операцию сохранения файлов, что и в примере выше:

Непечатаемые и недопустимые символы Unicode будут автоматически удалены из путей к файлам. По этой причине, вы по желанию можете очистить пути к файлам перед их передачей в методы хранения файлов Laravel. Пути к файлам нормализуются с помощью метода League\Flysystem\Util::normalizePath .

Указание диска

По умолчанию метод store загружаемого файла будет использовать ваш диск по умолчанию. Если вы хотите указать другой диск, передайте имя диска в качестве второго аргумента методу store :

Если вы используете метод storeAs , вы можете передать имя диска в качестве третьего аргумента метода:

Другая информация о загружаемом файле

Если вы хотите получить оригинальное имя загружаемого файла, вы можете сделать это с помощью метода getClientOriginalName :

Метод extension используется для получения расширения загружаемого файла:

Видимость файла

В интеграции Laravel Flysystem «видимость» – это абстракция прав доступа к файлам на нескольких платформах. Файлы могут быть объявлены public или private . Когда файл объявляется public , вы указываете, что файл обычно должен быть доступен для других. Например, при использовании драйвера s3 вы можете получить URL-адреса для public файлов.

Вы можете задать видимость при записи файла с помощью метода put :

Если файл уже был сохранен, его видимость может быть получена и задана с помощью методов getVisibility и setVisibility , соответственно:

При взаимодействии с загружаемыми файлами, вы можете использовать методы storePublicly и storePubliclyAs для сохранения загружаемого файла с видимостью public :

Локальные файлы и видимость

При использовании драйвера local , видимость public интерпретируется в право доступа 0755 для каталогов и право доступа 0644 для файлов. Вы можете изменить сопоставление прав доступа в файле конфигурации filesystems вашего приложения:

Удаление файлов

Метод delete принимает имя одного файла или массив имен файлов для удаления:

При необходимости вы можете указать диск, с которого следует удалить файл:

Каталоги

Получение всех файлов каталога

Метод files возвращает массив всех файлов указанного каталога. Если вы хотите получить список всех файлов каталога, включая все подкаталоги, вы можете использовать метод allFiles :

Получение всех каталогов из каталога

Метод directories возвращает массив всех каталогов указанного каталога. Кроме того, вы можете использовать метод allDirectories , чтобы получить список всех каталогов внутри указанного каталога и всех его подкаталогов:

Создание каталога

Метод makeDirectory создаст указанный каталог, включая все необходимые подкаталоги:

Удаление каталога

Наконец, для удаления каталога и всех его файлов можно использовать метод deleteDirectory :

Пользовательские файловые системы

Интеграция Laravel с Flysystem обеспечивает поддержку нескольких «драйверов» из коробки; однако, Flysystem этим не ограничивается и имеет адаптеры для многих других систем хранения. Вы можете создать собственный драйвер, если хотите использовать один из этих дополнительных адаптеров в своем приложении Laravel.

Чтобы определить собственную файловую систему, вам понадобится адаптер Flysystem. Давайте добавим в наш проект адаптер Dropbox, поддерживаемый сообществом:

Затем вы можете зарегистрировать драйвер в методе boot одного из поставщиков служб вашего приложения. Для этого вы должны использовать метод extend фасада Storage :


You could use PHP's unlink() method just as @Khan suggested.

But if you want to do it the Laravel way, use the File::delete() method instead.

// Delete a single file

// Delete multiple files

// Delete an array of files

And don't forget to add at the top:

use Illuminate\Support\Facades\File; - you may add that to your answer @moris-io

Use the unlink function of php, just pass exact path to your file to unlink function :

Do not forget to create complete path of your file if it is not stored in the DB. e.g


5,597 3 3 gold badges 29 29 silver badges 42 42 bronze badges Not deleted from folder, just deleted from database

this method worked for me
First, put the line below at the beginning of your controller:

below namespace in your php file Second:

$destinationPath --> the folder inside folder public.


1,135 1 1 gold badge 13 13 silver badges 23 23 bronze badges


First, you should go to config/filesystems.php and set 'root' => public_path() like so:

Then, you can use Storage::delete($filename);

8,525 12 12 gold badges 40 40 silver badges 45 45 bronze badges


To add to this answer, you can also so create a new disk called public_root and update the values as needed.

Using PHP unlink() function, will have the file deleted

The above will delete an image returned by $from_db->image_name located at public/uploads folder

7,202 1 1 gold badge 10 10 silver badges 20 20 bronze badges

Look the dot and concatenation before the call of facade Storage.


This worked at laravel 8


Update working for Laravel 8.x:

Deleting an image for example ->

First of all add the File Facade at the top of the controller:

Then use delete function. If the file is in 'public/' you have to specify the path using public_path() function:


First make sure the file exist by building the path



you can delete file and its record like wise:

enter image description here

note: items->file is my attribute in database where I have stored the name of the file like so,

I have stored the file in the directory "public/pdf_uploads/filename"

Don't forget to add this in your header


Try it :Laravel 5.5


Its a very old thread, but I don't see that the solution is here or the this thread is marked as solved. I have also stuck into the same problem I solved it like this

The key is that you need to remove '..' from the delete method. Keep in mind that this goes true if you are using Storage as well, whether you are using Storage of File don't for get to use them like

Hope that it will help someone.

the easiest way for you to delete the image of the news is using the model event like below and the model delete the image if the news deleted

at first you should import this in top of the model class use Illuminate\Support\Facades\Storage after that in the model class News you should do this

or you can delete the image in your controller with this command

but you should know that the default disk is public but if you create folder in the public folder and put the image on that you should set the folder name before $news->file_name

Laravel предоставляет мощную абстракцию для работы с файловой системой благодаря восхитительному PHP-пакету Flysystem от Франка де Жонге. Laravel Flysystem содержит простые в использовании драйвера для работы с локальными файловыми системами, Amazon S3 и Rackspace Cloud Storage. Более того, можно очень просто переключаться между этими вариантами хранения файлов, поскольку у всех одинаковый API.

Настройка

Настройки файловой системы находятся в файле config/filesystems.php . В нём вы можете настроить все свои «disks» . Каждый диск представляет определенный драйвер и место хранения. В конфигурационном файле имеются примеры для каждого поддерживаемого драйвера. Поэтому вы можете просто немного изменить конфигурацию под ваши нужды!

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

Общий диск

Диск public предназначен для общего доступа к файлам. По умолчанию диск public использует драйвер local и хранит файлы в storage/app/public . Чтобы сделать их доступными через веб, вам надо создать символьную ссылку из public/storage на storage/app/public . При этом ваши общедоступные файлы будут храниться в одной папке, которую легко можно использовать в разных развёртываниях при использовании систем обновления на лету, таких как Envoyer.

Для создания символьной ссылки используйте Artisan-команду sh storage:link :

Само собой, когда файл сохранён и создана символьная ссылка, вы можете создать URL к файлу с помощью вспомогательной функции PHP asset () :

Драйвер local

При использовании драйвера local все файловые операции выполняются относительно каталога root , определенного в вашем конфигурационном файле. По умолчанию это каталог storage/app . Поэтому следующий метод сохранит файл в storage/app/file.txt :

Требования к драйверам

Пакеты Composer

Перед использованием S3 или Rackspace вы должны установить соответствующие пакеты при помощи Composer:

    Amazon S3: league/flysystem-aws-s3-v3

Настройка драйвера S3

Настройки драйвера S3 находятся в файле config/filesystems.php . Там есть пример массива настроек для драйвера S3. Вы можете отредактировать этот массив в соответствии с вашими настройками и учётными данными для S3.

Настройка драйвера FTP

Интеграция Flysystem отлично работает с FTP, но в стандартном файле настроек filesystems.php нет примера настройки FTP. Если вам надо настроить файловую систему FTP, вы можете использовать в качестве примера приведенные ниже настройки:

Настройка драйвера Rackspace

Интеграция Flysystem отлично работает с Rackspace, но в стандартном файле настроек filesystems.php нет примера настройки Rackspace. Если вам надо настроить файловую систему Rackspace, вы можете использовать в качестве примера приведенные ниже настройки:

Получение экземпляров дисков

Для взаимодействия с любым из ваших сконфигурированных дисков можно использовать фасад Storage . Например, вы можете использовать метод этого фасада PHP put () , чтобы сохранить аватар на диск по умолчанию. Если вы вызовите метод фасада Storage без предварительного вызова метода PHP disk () , то вызов метода будет автоматически передан диску по умолчанию:

Некоторые задачи по извлечению или обработке данных, выполняемые вашим приложением, могут потребовать больших ресурсов ЦП или занять несколько секунд. В этом случае извлеченные данные обычно кешируют на некоторое время, чтобы их можно было быстро извлечь при последующих запросах тех же данных. Кешированные данные обычно хранятся в хранилище с быстрым доступом данных, например, Memcached или Redis.

К счастью, Laravel предлагает выразительный унифицированный API для различных серверов кеширования, позволяя вам воспользоваться их невероятно быстрым извлечением данных и ускорить работу вашего веб-приложения.

Конфигурирование

Файл конфигурации кеша вашего приложения находится в config/cache.php . В этом файле вы можете указать, какой драйвер кеша вы хотите использовать по умолчанию для всего приложении. Laravel из коробки поддерживает популярные механизмы кеширования, такие как Memcached, Redis, DynamoDB и реляционные базы данных. Кроме того, доступен драйвер кеширования на основе файлов, в то время как драйверы array и null предоставляют удобные механизмы кеширования для ваших автоматических тестов.

Файл конфигурации кеша также содержит различные другие параметры, которые описаны в файле, поэтому обязательно изучите эти параметры. По умолчанию Laravel настроен на использование драйвера кеширования файлов, который хранит сериализованные кешированные объекты в файловой системе сервера. Для более крупных приложений рекомендуется использовать более надежный драйвер, например Memcached или Redis. Вы даже можете настроить несколько конфигураций кеша для одного и того же драйвера.

Предварительная подготовка драйверов

Предварительная подготовка драйвера на основе базы данных

При использовании драйвера кеша database вам нужно будет настроить таблицу для хранения элементов кеша. Вы найдете пример объявления Schema ниже:

Вы также можете использовать команду php artisan cache:table Artisan для генерации миграции с правильной схемой.

Предварительная подготовка драйвера на основе Memcached

Для использования драйвера Memcached требуется установить пакет Memcached PECL. Вы можете перечислить все ваши серверы Memcached в файле конфигурации config/cache.php . Этот файл уже содержит запись memcached.servers для начала:

При необходимости вы можете задать параметр host сокета UNIX. Если вы это сделаете, то параметр port должен быть задан как 0 :

Предварительная подготовка драйвера на основе Redis

Перед использованием драйвера кеша Redis, вам нужно будет либо установить расширение PHP PhpRedis через PECL, либо установить пакет predis/predis (

1.0) через Composer. Laravel Sail уже включает это расширение. Кроме того, на официальных платформах развертывания Laravel, таких как Laravel Forge и Laravel Vapor, расширение PhpRedis установлено по умолчанию.

Для получения дополнительной информации о настройке Redis обратитесь к его странице документации Laravel.

DynamoDB

Перед использованием драйвера кеширования DynamoDB необходимо создать таблицу DynamoDB для хранения всех кешированных данных. Обычно эта таблица называется cache . Однако вы должны назвать таблицу в соответствии со значением параметра stores.dynamodb.table конфигурационного файла cache вашего приложения.

Эта таблица также должна иметь строковый ключ раздела с именем, которое соответствует значению параметра stores.dynamodb.key конфигурационного файла cache вашего приложения. По умолчанию ключ раздела называется key .

Управление кешем приложения

Получение экземпляра кеша

Чтобы получить экземпляр хранилища кеша, вы можете использовать фасад Cache , который мы будем использовать в этой документации. Фасад Cache обеспечивает удобный и краткий доступ к базовым реализациям контрактов кеширования Laravel:

Доступ к различным кеш-хранилищам

Используя фасад Cache , вы можете получить доступ к различным хранилищам кеша с помощью метода store . Ключ, переданный методу store , должен соответствовать одному из хранилищ, перечисленных в массиве stores вашего конфигурационного файла config/cache.php :

Получение элементов из кеша

Метод get фасада Cache используется для извлечения элементов из кеша. Если элемент не существует в кеше, будет возвращено значение null . Если хотите, то вы можете передать второй аргумент методу get , указав значение по умолчанию, которое вы хотите вернуть, если элемент отсутствует:

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

Проверка наличия элемента

Метод has используется для определения того, существует ли элемент в кеше. Этот метод также вернет false , если элемент существует, но его значение равно null :

Увеличение и уменьшение отдельных значений в кеше

Методы increment и decrement могут использоваться для изменения значений целочисленных элементов в кеше. Оба эти метода принимают необязательный второй аргумент, указывающий величину увеличения или уменьшения значения элемента:

Выполнение замыкания с последующим сохранением и получением результата

По желанию можно получить элемент из кеша, но также сохранить значение по умолчанию, если запрошенный элемент не существует. Например, вы можете получить всех пользователей из кеша или, если они не существуют, получить их из базы данных и добавить их в кеш. Вы можете сделать это с помощью метода Cache::remember :

Если элемент не существует в кеше, то замыкание, переданное методу remember , будет выполнено, и его результат будет помещен в кеш.

Вы можете использовать метод rememberForever , чтобы получить элемент из кеша или сохранить его навсегда, если он не существует:

Получение данных с последующим удалением элемента

Если вам нужно получить элемент из кеша, а затем удалить этот элемент, вы можете использовать метод pull . Как и в методе get , если элемент не существует в кеше, то будет возвращен null :

Сохранение элементов в кеше

Вы можете использовать метод put фасада Cache для сохранения элементов в кеше:

Если время хранения не передается методу put , то элемент будет храниться бесконечно:

Вместо того, чтобы передавать количество секунд как целое число, вы также можете передать экземпляр DateTime , представляющий желаемое время хранения кешированного элемента:

Сохранение значений при условии их отсутствия

Метод add добавит элемент в кеш, только если он еще не существует в хранилище кеша. Метод вернет true , если элемент был действительно добавлен в кеш. В противном случае метод вернет false . Метод add – это атомарная операция:

Сохранение элементов на постоянной основе

Метод forever используется для постоянного хранения элемента в кеше. Поскольку срок действия этих элементов не истекает, то их необходимо вручную удалить из кеша с помощью метода forget :

Если вы используете драйвер memcached , то элементы, которые хранятся «на постоянной основе», могут быть удалены, когда кеш достигнет предельного размера.

Удаление элементов из кеша

Вы можете удалить элементы из кеша с помощью метода forget :

Вы также можете удалить элементы, указав нулевое или отрицательное количество секунд срока хранения:

Вы можете очистить весь кеш, используя метод flush :

Очистка кеша не учитывает ваш настроенный «префикс» кеша и удаляет все записи из кеша. Внимательно учитывайте это при очистке кеша, который используется другими приложениями.

Глобальный помощник кеша

Помимо использования фасада Cache , вы также можете использовать глобальную функцию cache для извлечения и хранения данных через кеш. Когда функция cache вызывается с одним строковым аргументом, она возвращает значение переданного ключа:

Если вы передадите массив пар ключ / значение и срок хранения в функцию, то она будет хранить значения в кеше в течение указанного времени:

Когда функция cache вызывается без каких-либо аргументов, то она возвращает экземпляр реализации Illuminate\Contracts\Cache\Factory , позволяя вам вызывать другие методы кеширования:

При тестировании вызова глобальной функции cache вы можете использовать метод Cache::shouldReceive так же, как если бы вы тестировали фасад.

Тегированный кеш

Теги кеширования не поддерживаются при использовании драйверов кеширования file , dynamodb или database . Более того, при использовании нескольких тегов с кешами, которые хранятся «на постоянной основе», то производительность будет лучше с драйвером, таким как memcached , который автоматически очищает устаревшие записи.

Сохранение элементов тегированного кеша

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

Доступ к элементам тегированного кеша

Чтобы получить элемент тегированного кеша, передайте тот же упорядоченный список тегов методу tags , а затем вызовите метод get с ключом, который вы хотите получить:

Удаление элементов тегированного кеша

Вы можете удалить все элементы, которым назначен тег или список тегов. Например, эта операция удалит все кеши, помеченные либо people , либо authors , либо обоими. Таким образом, и Anne , и John будут удалены из кеша:

Напротив, эта операция удалит только кешированные значения, помеченные как authors , поэтому будет удалена Anne , но не John :

Атомарные блокировки

Чтобы использовать этот функционал, ваше приложение должно использовать драйвер кеша memcached , redis , dynamodb , database , file , или array в качестве драйвера кеша по умолчанию для вашего приложения. Кроме того, все серверы должны взаимодействовать с одним и тем же центральным сервером кеширования.

Предварительная подготовка драйверов

Предварительная подготовка драйвера на основе базы данных для атомарных блокировок

При использовании драйвера кеша database вам необходимо настроить таблицу, в которой будут храниться блокировки кеша вашего приложения. Вы найдете пример объявления Schema ниже:

Управление блокировками

Атомарные блокировки позволяют управлять распределенными блокировками, не беспокоясь об условиях приоритетности. Например, Laravel Forge использует атомарные блокировки, чтобы гарантировать, что на сервере одновременно выполняется только одна удаленная задача. Вы можете создавать и управлять блокировками, используя метод Cache::lock :

Метод get также принимает замыкание. После выполнения замыкания Laravel автоматически снимет блокировку:

Если блокировка недоступна в тот момент, когда вы ее запрашиваете, вы можете указать Laravel подождать определенное количество секунд. Если блокировка не может быть получена в течение указанного срока, то будет выброшено исключение Illuminate\Contracts\Cache\LockTimeoutException :

Приведенный выше пример можно упростить, передав замыкание методу block . Когда замыкание передается этому методу, Laravel будет пытаться получить блокировку на указанное количество секунд и автоматически снимет блокировку, как только замыкание будет выполнено:

Управление блокировками между процессами

Иногда может потребоваться установить блокировку в одном процессе и снять ее в другом процессе. Например, вы можете получить блокировку во время веб-запроса и захотите снять блокировку в конце задания в очереди, которое запускается этим запросом. В этом сценарии вы должны передать «токен инициатора» с областью действия блокировки в задание в очереди, чтобы задание могло повторно создать экземпляр блокировки с использованием данного токена.

В приведенном ниже примере мы отправим задание в очередь, если блокировка будет успешно получена. Кроме того, мы передадим токен инициатора блокировки заданию в очереди с помощью метода owner блокировки:

В рамках задания ProcessPodcast нашего приложения мы можем восстановить и снять блокировку с помощью токена инициатора:

Если вы хотите принудительно снять блокировку без учета текущего инициатора, то вы можете использовать метод forceRelease :

Добавление собственных драйверов кеша

Написание драйвера кеша

Чтобы создать собственный драйвер кеша, сначала нужно реализовать контракт Illuminate\Contracts\Cache\Store . Итак, реализация кеша MongoDB может выглядеть примерно так:

Нам просто нужно реализовать каждый из этих методов, используя соединение MongoDB. Для примера того, как реализовать каждый из этих методов, взгляните на Illuminate\Cache\MemcachedStore в исходном коде фреймворка Laravel. Как только наша реализация будет завершена, мы можем завершить регистрацию своего драйвера, вызвав метод extend фасада Cache :

Если вам интересно, где разместить свой собственный код драйвера кеша, то вы можете создать пространство имен Extensions в своем каталоге app . Однако имейте в виду, что Laravel не имеет жесткой структуры приложения, и вы можете организовать свое приложение в соответствии со своими предпочтениями.

Первым аргументом, передаваемым методу extend , является имя драйвера. Это будет соответствовать вашему параметру driver в файле конфигурации config/cache.php . Второй аргумент – это замыкание, которое должно возвращать экземпляр Illuminate\Cache\Repository . Замыкание будет передано экземпляру $app , который является экземпляром контейнера служб.

После регистрации расширения обновите параметр driver в файле конфигурации config/cache.php , указав имя вашего расширения.

События

Чтобы выполнить код для каждой операции с кешем, вы можете прослушивать события, запускаемые кешем. Как правило, вы должны поместить эти слушатели событий в класс App\Providers\EventServiceProvider приложения:






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

Первое, что нам необходимо сделать – это настроить место хранения наших файлов (storage)

Настройка файловой системы

Все настройки для файловых систем находятся в config/filesystems.php. Откроем этот файл, нас интересует элемент массива «disks». Добавим в него следующий код:

Как вы помните, картинки у нас хранятся в storage/images.

Контроллер для работы с файлами: просмотр и удаление

Контроллер, который отвечает за роботу с файлами называется UploadController (из статьи «Загрузка файлов в Laravel»). Данный контроллер содержит два метода:

  • Метод отображения формы для загрузки файлов – getForm
  • Метод, который отвечает непосредственно за загрузку файлов – upload

Нам необходимо добавить еще два метода:

  • getFiles – метод, который будет получать все файлы, которые хранятся в нашем storage
  • delete – метод, который удаляет файл

Теперь нам нужно создать вьюшку files.blade.php

Создание view для отображения файлов

В папке resources/views создадим файл files.blade.php и добавим в него следующий код:

Осталось только добавить роуты.

Создание роутов

Открываем файл routes/web.php и добавляем в него следующий код:

Просмотр файлов

И проверим папку где хранятся наши картинки.

Проверка даиректории с файлами

Удаление файла

Как видим, файл удален и у нас больше нет файлов.

Нет файлов

Давайте проверим папку. Как видите папка пуста

Проверка папки

Отлично. Мы с вами разобрали как с помощью Laravel просмотреть файлы в папке и как их удалить.

Не забываем подписаться, чтобы не пропустить выхода новых статей: VK, Facebook, Twitter

Понравилась статья? Поделись с друзьями.

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

Первое, что нам необходимо сделать – это настроить место хранения наших файлов (storage)

Настройка файловой системы

Все настройки для файловых систем находятся в config/filesystems.php. Откроем этот файл, нас интересует элемент массива «disks». Добавим в него следующий код:

Как вы помните, картинки у нас хранятся в storage/images.

Контроллер для работы с файлами: просмотр и удаление

Контроллер, который отвечает за роботу с файлами называется UploadController (из статьи «Загрузка файлов в Laravel»). Данный контроллер содержит два метода:

  • Метод отображения формы для загрузки файлов – getForm
  • Метод, который отвечает непосредственно за загрузку файлов – upload

Нам необходимо добавить еще два метода:

  • getFiles – метод, который будет получать все файлы, которые хранятся в нашем storage
  • delete – метод, который удаляет файл

Теперь нам нужно создать вьюшку files.blade.php

Создание view для отображения файлов

В папке resources/views создадим файл files.blade.php и добавим в него следующий код:

Осталось только добавить роуты.

Создание роутов

Открываем файл routes/web.php и добавляем в него следующий код:

Просмотр файлов

И проверим папку где хранятся наши картинки.

Проверка даиректории с файлами

Удаление файла

Как видим, файл удален и у нас больше нет файлов.

Нет файлов

Давайте проверим папку. Как видите папка пуста

Проверка папки

Отлично. Мы с вами разобрали как с помощью Laravel просмотреть файлы в папке и как их удалить.

Не забываем подписаться, чтобы не пропустить выхода новых статей: VK, Facebook, Twitter

Читайте также: