2014-10-03 24 views
6

sto usando compositore nel mio ultimo progetto e mappare la mia funzione come questaCompositore Autocarica più file in cartelle

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

Immagino che ci saranno un sacco di file in una cartella di funzioni, es: real-funzione -1.php, real-function-2.php, ecc. Quindi, il compositore può chiamare tutti i file nella funzione cartella? I pigri per usare

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

C'è qualche pigro come me ...

+1

Questo è il lavoro della funzione 'autoload'. Riceverà automaticamente il "file principale" che tipicallu includerà una serie di istruzioni require. [Ecco un esempio] (https://github.com/WhitePayments/white-php/blob/master/White.php) – FloatingRock

risposta

11

Se non è possibile namespace le funzioni (perché si romperà un mucchio di codice, o perché non è possibile utilizzare PSR -4) e non si desidera creare classi statiche che mantengano le proprie funzioni (che potrebbero quindi essere caricate automaticamente), è possibile creare il proprio file di inclusione globale e quindi chiedere al compositore di includerlo.

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); 

Questo non è l'ideale in quanto si carica ogni file per ogni richiesta, a prescindere o meno le funzioni in esso ci si abitua, ma funzionerà.