首页 > 解决方案 > 从 Laravel 中的文件夹复制文件

问题描述

我在工作中使用 laravel 开发 CMS,如果我发布品牌网站的页面,我需要在发布之前创建一个文件夹结构。

万一我 app / themes / default / public想复制文件夹内的public文件并将它们发送到将要创建的文件夹app / websites-published / '. $ content-> nanoid

我该怎么做?

    public function publish(Request $request, Site $site)
    {
        /** @var  $contents */
        $contents = $site->contents;

        /** @var  $content */
        foreach ($contents as $content) {

            // Copiar o Public do THEME - THEME/NOME DO TEMA/PUBLIC - WebsitePublished->Nanoid
            // Conteudo do ex: THEME/PUBLIC
            $copyTheme = storage_path('app/themes/default/public');
            $sendTheme = public_path('app/websites-published/' . $content->nanoid);
            copy($copyTheme, $sendTheme);


            // Copiar o Public do WEBSITE - WebsitePublished->Site:Nanoid
            // Conteudo do ex: WEBSITE/SUZUKI/PUBLIC


            // APP/WEBPUBLISHED
        }

        return $this->viewService->renderContent($request, $content);
    }

标签: phplaravelfile

解决方案


Laravel 有一个 Filesystem 可以处理大多数系统上的文件操作。外观类只能复制单个文件,因此Storage您需要轻松地循环到所有文件,但这是太多的工作,因为该类Filesystem可以在递归地创建目录时递归地复制或移动整个目录。

要移动整个目录,您必须执行 import Filesystem class :

use Illuminate\Filesystem\Filesystem;

并使用copyDirectory()方法:

public function publish(Request $request, Site $site)
{
    /** @var  $contents */
    $contents = $site->contents;

    /** @var  $content */
    foreach ($contents as $content) {

        // Copiar o Public do THEME - THEME/NOME DO TEMA/PUBLIC - WebsitePublished->Nanoid
        // Conteudo do ex: THEME/PUBLIC
        $copyTheme = storage_path('app/themes/default/public');
        $sendTheme = public_path('app/websites-published/' . $content->nanoid);
        $filesys = new Filesystem();
        $filesys->moveDirectory($copyTheme, $sendTheme);


        // Copiar o Public do WEBSITE - WebsitePublished->Site:Nanoid
        // Conteudo do ex: WEBSITE/SUZUKI/PUBLIC


        // APP/WEBPUBLISHED
    }

    return $this->viewService->renderContent($request, $content);
}

推荐阅读