2016-06-20 21 views
1

Es ist das erste Mal, dass ich Composer benutze, und ich bekomme ein bisschen batzig, um herauszufinden, warum es meine Namensräume nicht aufnimmt.Schwerwiegender Fehler: Uncaught Fehler: Klasse 'Project Router Hello' nicht gefunden

In meinem project/ Verzeichnis:

├── composer.json 
├── composer.lock 
├── composer.phar 
├── README.md 
├── vendor (truncated) 
└── src 
    ├── Config.php 
    ├── Handler.php 
    └── Router.php 

src/Config.php

<?php 
$project_root = realpath(__DIR__ . '/..'); 
$autoload = $project_root . '/vendor/autoload.php'; 
?> 

src/router.php

<?php namespace Project\Router; 
include_once("Config.php"); 
require $autoload; 

use Project\Handler; 

Hello::world(); 
?> 

src/handler.php

<?php namespace Project\Handler; 

include_once("Config.php"); 
require $autoload; 

class Hello { 
    public function world() { 
     echo "Hello world!"; 
    } 
} 
?> 

composer.json

{ 
    "autoload": { 
     "psr-4": { 
      "Project\\": "src" 
     } 
    } 
} 

http://127.0.1.1/project/src/Router.php:

Fatal error: Uncaught Error: Class 'Project\Router\Hello' not found in /path/to/project/src/Router.php:38(not actual line) Stack trace: #0 {main} thrown in /path/to/project/src/Router.php on line 38(not actual line)

Ich bin in der Lage ausländische Abhängigkeiten zu verwenden, so mein allgemeinen Composer Setup scheint ok. Ich kann einfach nicht herausfinden, wo ich meine eigenen Namespaces vermassle.

+0

Just for Kicks, haben Sie versucht, '\ Project \ Handler \ Hallo :: Welt mit();' statt 'use'? – Machavity

+0

@Machovity Ja, ich habe sicherlich. Derselbe Fehler. – deadghost

Antwort

1

Sie scheinen falsch zu interpretieren, wie PSR4 funktioniert.

"autoload": { 
    "psr-4": { 
     "Project\\": "src" 
    } 
} 

Diese Konfiguration bedeutet, wenn Sie die Klasse Project \ Handler \ Hallo aus dem Autoloader wird es zu überprüfen, den Weg anfordern src\Handler\Hello.php (die es nicht gibt.)

Wenn Sie die Verzeichnisstruktur ändern folgendes wird es funktionieren:

└── src 
    ├── Config.php 
    ├── Router.php 
    └── Handler 
     └── Hello.php (renamed from Handler.php) 

auch weder Config.php oder router.php enthalten Klassen, die den Punkt besiegt eine Klasse Autoloader verwenden.

Geben Sie diesem einen Lese: http://www.php-fig.org/psr/psr-4/