2016-04-05 3 views
1

Возможно, что-то тривиальное, но у меня проблема с базовой автозагрузкой. Я хочу создать песочницу проект только для тестирования новых решений, так я создал следующую структуру:Автозагрузка композитора с PSR4

Sandbox 
|- index.php 
|- composer.json 
|- vendor 
| |- {autogenerated content} 
|- src 
    |- Working.php 

Файл composer.json выглядит следующим образом:

{ 
    "name": "vendor/sandbox", 
    "authors": [ 
     { 
      "name": "foo", 
      "email": "[email protected]" 
     } 
    ], 
    "require": { 
     "phpunit/phpunit": "dev-master", 
     "phpunit/phpunit-mock-objects": "dev-master" 
    }, 
    "psr-4": { 
     "Sandbox\\": "src/" 
    } 
} 

Конечно, я запустить composer.update после изменений. Тогда я написал тривиальное тело Working.php:

<?php 

namespace Sandbox; 

class Working 
{ 
    public function __construct() { 
     echo "Hello World"; 
    } 
} 

И конечно index.php, а также:

<?php 
require_once __DIR__ . '/vendor/autoload.php'; 

use Sandbox\Working; 

new Working(); 

?> 

Я проверил права доступа к этим файлам просто чтобы быть уверенным, но когда я пытаюсь запустить я получаю

PHP Fatal error: Class 'Sandbox\Working' not found in /var/www/Sandbox/index.php on line 6 

Я понимаю, что это, вероятно, что-то тривиальное, но что здесь может быть неправильным?

ответ

1

На вашем composer.json вам не хватает autoload ключ. Это должно быть как

"autoload": { 
    "psr-4": { 
     "Sandbox\\": "src/" 
    } 
} 
+0

я новый это было чем-то тривиальным. .. благодаря :) – Moby04

1

Я считаю

"psr-4": { 
     "Sandbox\\": "src/" 
    } 

Должно быть:

"autoload": { 
    "psr-4": { 
     "Sandbox\\": "src/" 
    } 

Так что ваш файл будет:

{ 
    "name": "vendor/sandbox", 
    "authors": [ 
     { 
      "name": "foo", 
      "email": "[email protected]" 
     } 
    ], 
    "require": { 
     "phpunit/phpunit": "dev-master", 
     "phpunit/phpunit-mock-objects": "dev-master" 
    }, 
    "autoload": { 
     "psr-4": { 
      "Sandbox\\": "src/" 
    } 
}