2013-12-07 18 views
6

Non riesco a convincere il compositore a lavorare con le mie classi/file usando il meccanismo di autoload psr-0. Qualcuno può per favore gettare un po 'di luce sul perché il sotto non funziona?Il compositore non sta caricando i miei file psr-0

sto ottenendo il seguente output nel mio log degli errori:

PHP Fatal error: Class 'TestdirTest1' not found in /home/webroot/bitlama/index.php on line 5

E funziona Se togliere il commento alla esplicita dichiarazione richiedo (index.php: 2).

E se qualcuno si sta chiedendo - sì ho eseguito l'installazione di compositore sotto forma di: 'php ../composer.phar install'.

Questa è la mia struttura di directory:

├── composer.json 
├── index.php 
├── testspacedir 
│   └── Testdir 
│    └── test1.php 
└── vendor 
    ├── autoload.php 
    └── composer 
     ├── autoload_classmap.php 
     ├── autoload_namespaces.php 
     ├── autoload_real.php 
     └── ClassLoader.php 

composer.json:

{ 
    "autoload": { 
     "psr-0": { "Testdir\\": "testspacedir/"} 
    } 
} 

test1.php:

<?php 

namespace Testdir; 

class Test1 { 

    public function __construct() 
    { 
     echo "Woohoo Test1"; 
    } 

} 

index.php:

<?php 
require 'vendor/autoload.php'; 
//require 'testspacedir/Testdir/test1.php'; 

$test1 = new Testdir\Test1(); 

vendor/autoload.php:

<?php 

// autoload.php @generated by Composer 

require_once __DIR__ . '/composer' . '/autoload_real.php'; 

return ComposerAutoloaderInit7b4760e0f7ca9d6454dd2f098c374ba4::getLoader(); 
+0

Dai un'occhiata al 'vendor/compositore/autoloader_namespaces.php'. Questo dovrebbe contenere una riga con il tuo spazio dei nomi come chiave di array e la cartella corretta. – Sven

risposta

3

mio file di classe è stato nominato come test1.php invece della richiesta PSR-0 convenzione di denominazione di Test1.php.

+0

contrassegnalo come risposta, se lo è. – Richard

0

Tu dici che funziona perché è stato rimosso require 'testspacedir/Testdir/test1.php'; e che è corretto.

Poiché è stato definito lo spazio dei nomi -> struttura di cartelle nello autoload in composer.json, lo vendor/autoload.php gestisce il caricamento di tali cartelle per te.

Dai uno sguardo all'interno del file vendor/autoload.php e lo vedrai da solo.

Per riassumere, compositore gestisce l'autoloading dei file per voi in modo da non dover eseguire questi include. Ecco un frammento da http://getcomposer.org/doc/01-basic-usage.md#autoloading

Note: Composer provides its own autoloader. If you don't want to use that one, you can just include vendor/composer/autoload_namespaces.php, which returns an associative array mapping namespaces to directories.

+0

Intendevo dire che funziona SOLO se ho esplicitamente bisogno di una dichiarazione. Non funziona diversamente: ho un errore fatale. –

+0

Allora sono confuso, hai passato manualmente il file "autoload.php' e vedi se tutto si verifica e tutti i percorsi sono impostati correttamente? – SamV

+0

Non è sicuro di essere abbastanza onesto. Ho modificato la domanda originale con i contenuti di autoload.php –