2015-12-25 84 views
0

在laravel中,我試圖使用控制檯創建文件。我將要創建的文件是一個特徵文件。我的情況是,如果我只寫了文件的名稱,它會根據需要創建。但是,當作爲目錄傳遞時,它不會被創建。如何在php中創建嵌套的目錄php

該數組可以是動態的。這取決於用戶多大的目錄應該是。

只是爲了舉例:我採取2級目錄。

我的數組是:

Array 
(
    [0] => 'RootTrait' // the root place of the trait folder 
    [1] => 'Level-1' // Directory inside the trait folder 
    [2] => 'Level-2' // Directory inside the Level-1 folder 
    [3] => 'file.php' // The file that will be created inside Level 2 folder 
) 

我應該怎麼做才能實現這一目標?

,我已經試過到目前爲止是代碼:

/** 
* Process the creation of trait file. 
* 
* @param string $traitName 
* @param \Illuminate\Filesystem\Filesystem $file 
* @param string $nameSpace 
* @return bool 
*/ 
public function processTraitFile($traitName, Filesystem $file, $nameSpace = 'App') 
{ 
    $traitFileName = $file->get('app/stubs/Trait.stub'); 

    $newTraitFile = str_replace(['TraitName', 'App'], [$traitName, $nameSpace], $traitFileName); 

    if (! file_exists("app/Http/Traits/{$traitName}")) { 
     $traitFolders = explode('/', $traitName); 
     $lastElement = array_pop($traitFolders); 

     foreach ($traitFolders as $key => $folder) { 
      $file->makeDirectory('app/Http/Traits/' . $folder, 0755, true); 
     } 
    } 

    return $file->put("app/Http/Traits/{$traitName}.php", $newTraitFile); 
} 

,上述方法並創建文件夾,但不能嵌套。它是這樣創建文件夾:

|-- Root Trait Folder 
    |-- Level-1 
    |-- Level-2 
    |-- file.php 

我知道這一定很容易實現,但我失敗了。

請幫助我。謝謝。

回答

2

我會簡單地改變你的for循環

$n = 'app/Http/Traits/'; 
foreach ($traitFolders as $key => $folder) { 
     $file->makeDirectory($n. $folder, 0755, true); 
     $n .= $folder.'/'; 
    } 
1

您可以使用dirname

// $traitName = 'RootTrait/Level-1/Level-2/file.php'; 

if (! $file->exists("app/Http/Traits/{$traitName}")) { 
    $traitFolders = dirname($traitName); 

    $file->makeDirectory('app/Http/Traits/' . $traitFolders, 0755, true); 
} 

return $file->put("app/Http/Traits/{$traitName}", $newTraitFile); 
2

請使用下面的代碼

<?php 
    $n = 'app/Http/Traits/'; 
    $n .= $traitName; 
    mkdir($n, 0755, true); 
?>