【问题标题】:Laravel create storage folder subfoldersLaravel 创建存储文件夹子文件夹
【发布时间】:2018-03-18 15:09:04
【问题描述】:

在我的 Laravel 存储文件夹中,我有子文件夹,例如 usersadmins。是否有类似存储文件夹的播种机?因为我需要确保在将文件保存到users 时存在(而不检查该文件夹是否实际存在),而且我不想手动从 Git 拉取并部署这些文件夹。

【问题讨论】:

  • 您是如何将文件存储在这些子文件夹中的?因为默认情况下Filesystem实际上是在这些文件夹不存在的时候自动创建的。
  • 我只使用$request->file('file')->store('...')。如果这已经成功了,那么......
  • local 文件系统驱动程序在找不到目录时会递归地创建文件夹。 Source code。第三个参数true表示递归创建文件夹。

标签: php laravel laravel-5.5


【解决方案1】:

我相信我可能会为您准备一段有趣的代码:

    /**
     * Generate directory structure
     * @param $basePath, path where all directories will be created in
     * @param $relativePath, recursive array in structure of directories
     * @param $permission, permission code to apply to folders
     */
    function generateDirectories($basePath, $relativePath, $permission)
    {
        //If array, unfold it
        if(is_array($relativePath))
        {
            foreach($relativePath as $key => $path)
            {
                //If key is not numeric, add it to foldername, else empty
                $folderName = is_numeric($key) ? '' : '\\' . $key;
                $this->generateDirectories($basePath . $folderName, $path, $permission);
            }
        }
        //Else handle it
        else
        {
            try
            {
                $this->fileSystem->makeDirectory($basePath . '\\' . $relativePath, $permission, true);
                $this->log('Successfully made directory: ' . $basePath . '\\' . $relativePath, 0);
            }
            catch(\Exception $ex)
            {
                //Do your logging or whatever
            }
        }
    }

基本上给它一个这样的数组:

[
    $moduleName => [
      'src' => [
        'Commands',
        'Contracts',
        'Controllers',
        'Models',
        'Providers',
        'DataTables',
        'Routes',
        'Migrations',
        'Resources' => [
            'Views',
            'Lang'
        ],
        'Assets' => [
            'js',
            'css'
        ],
    ],
]

它开始构建您的文件夹结构。

希望对你有帮助:)

【讨论】: