2012-07-21 16 views
6

So che questa domanda è già stata fatta, ma sembra che il processo di caricamento automatico sia cambiato un po 'con il compositore.aggiungi una libreria a silex

Voglio solo aggiungere una libreria di classi al mio progetto silex.

Così ho fatto questo file: vendor \ lib \ picture.php

<?php 
namespace MyNamespace; 

class Picture 
{ 
    function testage() 
    { 
     echo 'hihaaa ça marche'; exit; 
    } 
} 

in vendor/compositore/autoload_namespaces.php, ho aggiunto questa linea alla grande matrice:

'MyNamespace' => $vendorDir . '/lib/', 

e nel file principale ho aggiunto:

use MyNamespace\Picture as Picture; 

e lo ha chiamato così:

$app->register(new Picture()); 

che mi dà questo errore:

Fatal error: Class 'MyNamespace\Picture' not found... 

Io proprio non so come aggiungere una classe che posso usare da qualsiasi controller, facilmente, senza riga di comando (non uso compositore, ho scaricato silex preconfigurato), qualche idea?

risposta

12

se si sta utilizzando il compositore non si dovrebbe cambiare la directory di fornitore. Non dovresti aggiungere file e non modificare i file generati dal compositore.

Si consiglia di inserire tali classi nella directory src. @gunnx mostra come configurare l'autoloading in composer.json, in modo che venga generato nuovamente ogni volta che si esegue composer install.

Il file si trova in src/MyNamespace/Picture.php. Il config autoload in composer.json sarebbe:

{ 
    "autoload": { 
     "psr-0": { "MyNamespace": "src/" } 
    } 
} 

La soluzione attuale è una combinazione delle due risposte precedenti. Ma penso che sia importante ottenere i dettagli giusti ;-).

+1

Alla fine della sua domanda dice esplicitamente che non sta usando il compositore. – Maerlyn

+0

Thx @igorw! Mettere "src /" ha funzionato per me! =) (Anche se mi chiedo perché) –

2

La classe Picture deve trovarsi in questo file: vendor/lib/MyNamespace/Picture.php. Nota lo spazio dei nomi completo e l'involucro.

+0

grazie, la tua risposta ti sta davvero aiutando. Aggiungo anche per implementare ServiceProviderInterface e aggiungere i metodi di avvio e registrazione, e ora non ho alcun errore. – Vilrouge

+0

Se la mia risposta ha risolto il tuo problema, ti preghiamo di accettarlo. – Maerlyn

2

È possibile aggiungere il proprio codice al caricatore automatico aggiungendo quanto segue al proprio compositore.json ad es.

{ 
"autoload": { 
    "psr-0": {"Acme": "src/"} 
} 
Problemi correlati