Автозагрузка композитора с помощью 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/"}
}
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/"}
}
1

По вопросам рекламы [email protected]