2014-10-03 10 views
6

ich in meinem neuesten Projekt und Kartierung meine Funktion wie dieseKomponist Autoload mehrere Dateien in Ordner

"require": { 
    ... 
}, 
"require-dev": { 
    ... 
}, 
"autoload": { 
    "psr-4": { 
     ... 
    }, 
    "files": [ 
     "src/function/test-function.php" 
    ] 
} 

mit Komponist ich dort vorstellen, viele Dateien in einem Ordner-Funktion sein wird, ab: real-Funktion -1.php, real-function-2.php usw. Kann also der Composer alle Dateien in der Ordnerfunktion aufrufen? i faul verwenden

"files": [ 
    "src/function/real-function-1.php", 
    "src/function/real-function-2.php", 
    .., 
    "src/function/real-function-100.php", 
] 

es irgendeine faul wie ich ...

+1

Das ist die Aufgabe der Autoload-Funktion. Es wird automatisch die "Hauptdatei" laden, die typischerweise eine Reihe von Require-Anweisungen enthalten würde. [Hier ein Beispiel] (https://github.com/WhitePayments/white-php/blob/master/White.php) – FloatingRock

Antwort

11

Wenn Sie nicht Ihre Funktionen Namespace kann (weil es eine Reihe von Code zu brechen, oder weil Sie nicht PSR verwenden können -4), und Sie möchten keine statischen Klassen erstellen, die Ihre Funktionen enthalten (die dann automatisch geladen werden könnten), Sie könnten Ihre eigene globale Include-Datei erstellen und dann dem Composer mitteilen, dass er diese einschließen soll.

composer.json

{ 
    "autoload": { 
     "files": [ 
      "src/function/include.php" 
     ] 
    } 
} 

include.php

$files = glob(__DIR__ . '/real-function-*.php'); 
if ($files === false) { 
    throw new RuntimeException("Failed to glob for function files"); 
} 
foreach ($files as $file) { 
    require_once $file; 
} 
unset($file); 
unset($files); 

Das ist nicht ideal, da es jede Datei für jede Anforderung geladen werden, unabhängig davon, ob die Funktionen daran gewöhnt werden, aber es wird funktionieren.

Verwandte Themen