2015-04-19 3 views
16

Dies wird über Laravel 5.Wie kann die Glob-Methode der Dateisystemklasse mit StorageFacade genutzt werden?

ich in Illuminate\Filesystem\Filesystem ein Verfahren glob($pattern, $flags = 0) Leider

genannt sehen können, ist diese Methode nicht FilesystemAdapter mit Laravel

5. sein Dies würde versendet im Standard reflektiert groß, weil ich etwas wie Storage::disk('local')->glob([_]*[.blade.php]); machen müsste (um alle gespeicherten Blade-Dateien beginnend mit einem Unterstrich zu erhalten.

Was ist der sauberste Weg, dies zu erreichen?

+0

Wenn Sie nicht nur 'Dateisystem :: glob()' verwenden? – lukasgeiter

+0

Die direkte Verwendung von 'Dateisystem :: glob()' würde es nicht erlauben, Storage und die dazugehörige Konfiguration zu verwenden ... Ich denke, ich müsste einen neuen Dateitreiber hinzufügen (oder den "lokalen" Treiber erweitern), aber so ist es zu komplex ... –

+0

Kannst du 'Dateisystem-> Festplatte ('local') -> glob()'? – Laurence

Antwort

7

Ich glaube, Sie nicht glob hier laufen können, aber man konnte alle Dateien erhalten und sie dann filtern, zum Beispiel:

$files = array_filter(Storage::disk('local')->files(), function ($file) 
{ 
    return preg_match('/_(.*)\.blade\.php$/U', $file); 
}); 

Natürlich müssen Sie entscheiden, files oder allFiles (rekursiv) zu verwenden, je nach braucht. Wahrscheinlich ist es nicht die beste Lösung, wenn Sie Tausende von Dateien haben, aber wenn Sie es nicht tun, sollte es genug sein

+0

Vielleicht 'allFiles()' wenn rekursives Matching erwünscht ist. – bishop

+0

Wie Sie sagten, ist dies nicht die eleganteste Funktion. Ich würde lieber die native php 'glob()' Funktion verwenden. Danke sowieso Marcin, dass du dir die Zeit genommen hast, um einen Vorschlag zu machen :) –

+0

Ich habe am Ende eine benutzerdefinierte Dateihelfer-Klasse erstellt, die Laravel Dependency Injection Container nicht nutzt, aber das wird den Trick für mich machen ... @Marcin: Wie auch immer, du hast das verdient Kopfgeld. ;-) –

Verwandte Themen