簡體   English   中英

使用種子選項遷移刷新時如何清除 Laravel 存儲文件夾

[英]How to clear Laravel storage folder when migrate refresh with seed option

遷移刷新時如何清除 Laravel 存儲文件夾? 我想在運行命令php artisan migrate:refresh --seed時清除storage/app/public文件夾

我嘗試過的:添加(new Filesystem)->deleteDirectory(storage_path('app/public/images')); database/seeders/DatabaseSeeder.php但不工作,當我

我將在這里分享一些片段,您可以將其放入您的database/seeders/DatabaseSeeder.php中,這樣它就可以完成所有工作。 只是不要忘記, 默認情況下您可能會有storage/app/public/.gitignore文件,不需要刪除。 所以這是一個刪除文件和文件的片段,但有例外。

注意:在運行播種機之前運行“ php artisan storage:link ”,以訪問存儲磁盤中的資源。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Filesystem\Filesystem;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $fs = new Filesystem;

        // delete directories
        $except_folder_names = [
            // folder name (storage/app/public/<folder_name>)
        ];
        $folder_paths = $fs->directories(public_path('storage'));
        foreach ($folder_paths as $folder_path) {
            $folder_name = last(explode('/', $folder_path));
            if (!in_array($folder_name, $except_folder_names)) {
                $fs->deleteDirectory($folder_path);
            }
        }

        // delete files
        $except_file_names = [
            '.gitignore',
            // file name (storage/app/public/<file_name>)
        ];
        $file_paths = $fs->files(public_path('storage'));
        foreach ($file_paths as $file_path) {
            $file_name = last(explode('/', $file_path));
            if (!in_array($file_name, $except_file_names)) {
                $fs->delete($file_path);
            }
        }

        echo "Uploads successfully deleted!\n";
        
        // OTHER SEEDERS...
    }
}

有了這個,你可以從storage/app/public中刪除所有的東西(遞歸的文件和文件夾)

在其他情況下,如果您只想清理目錄而不是刪除它們,則可以使用以下內容:

$directory = public_path('storage/' . $folder_name);
$file->cleanDirectory($directory);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM