2015-11-02 3 views
0

Я пытаюсь автозагрузить классы. Я создаю папку app/Classes с файлом Foo.php и файлом Bar.php.Laravel 5 проблема автозагрузки класса - Class Not Found Error

В composer.json У меня есть папка ссылки

"autoload": { 
    "classmap": [ 
     "database", 
     "app/Classes/" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    }, 
    "files": ["app/Library/myFunctions.php"] 
}, 

Следуйте за этим

composer dump-autoload 

проконтролировала Vandor/автозагрузка/autoload_classmap.php имеет как

'Bar' => $baseDir . '/app/Classes/Bar.php', 
'Foo' => $baseDir . '/app/Classes/Foo.php', 

Я положил простая функция в каждом классе, например:

<?php 
    class Bar { 
     public function __construct(){ 
      echo 'Bar'; 
     } 
    } 
?> 

Тогда я пытаюсь ссылаться на него

new Bar; 

и получить ошибку

FatalErrorException in LoginController.php line 24: 
Class 'App\Http\Controllers\Login\Bar' not found 

ТЕПЕРЬ ..... решить ошибку я ставлю

new \Bar; 

и мы хороши.

Есть ли какая-то причина, по которой мне нужно «\» в моем коде. Это исправление мне нигде не найти в документах, я просто заметил это на ларакастах и ​​добавил его в расстройство, и он работает.

ответ

0

Это проблема с именами. Он выглядит как установка "app/Classes/" как classmap устанавливает классы там как находящиеся в корневом пространстве имен. Таким образом, Foo и Bar находятся в корне. Ваш контроллер, похоже, находится в этом пространстве имен: App\Http\Controllers\Login. Если иначе не будут присвоены конкретные имена классов относительно текущего пространства имен, так что просто используя Foo, он будет искать класс App\Http\Controllers\Login\Foo., Где, если положить косую черту спереди, она относительна и идет прямо к корню (думайте о папках или URL-адресах) ,

Если вы хотите, чтобы это было более аккуратно, вы можете положить use Foo; наверху, под линией пространства имён, если таковая есть, но прежде всего.

+0

Похоже, я могу добавить App \ Classes \ Bar наверху, а затем создать новый бар; ИЛИ Я могу пропустить это и сделать новый \ App \ Classes \ Bar; Но я считаю, что я тестирую это из более глубокой папки, и большинство примеров, которые я следую, находятся в корневой папке .... – Iannazzi

+0

Однако просто использование «use Foo» не работает. – Iannazzi

+0

Хм, это странно - это \ Бар работает, но пространство имен на самом деле \ App \ Classses \ Bar. Я знаю, что Laravel делает некоторые хитрые трюки с именами классов много, но это все еще кажется странным. – Octo

Смежные вопросы