2015-07-04 4 views
0

Я использую slim framework, composer и psr-4 autoload.Namespacing не работает, используя композитор psr-4

Это в композиторе:

"Shorty\\":"app/Shorty" 

Примечание: Я попытался выше, также со структурой "Shorty\\":"app/Shorty/Models"

directorry: app/Shorty/Models/Trap.php

Внутри Trap.php:

namespace Shorty\Models; 

use Illuminate\Database\Eloquent\Model as Eloquent; 

    class Trap{ 
    #code here 
    } 

В моем маршруте :

$users=Trap::leftJoin('users', function($join){ 

и я получаю: Class 'Trap' не найден

Что я сделал не так?

+0

Возможно, это не поможет, но вы запустили 'comper dump-autoload' (или установку/обновление композитора) с момента добавления вашего пространства имен psr-4? – Ross

+0

Я сделал автозагрузку дампа, несколько раз тоже – TDawg

+0

Тогда в противном случае убедитесь, что вы используете 'use Shorty \ Models \ Trap;' объявление в верхней части файла маршрута, где вы используете 'Trap'. Если это так, я не вижу ничего, что не должно работать (часть «Shorty \\»: «app/Shorty» должна работать). Возможно, вы можете расширить свой вопрос с полной копией и вставкой объявления вашего композитора psr-4. Если есть какой-либо кеш, который вы можете очистить в своем приложении, попробуйте это тоже. – Ross

ответ

0

Если имя класса было бы правильно, вы не получите сообщение об ошибке:

Class 'Trap' not found 

, но это

Class 'Shorty\Models\Trap' not found 

Не упоминая полное имя класса, включая это пространство имен говорит мне что ваш код, который отсутствует в классе, не имеет оператора namespace, а также не импортирует с use, чтобы импортировать этот класс «Trap».

Или точнее:

Этот код будет жаловаться на отсутствующий класс «Ловушка».

Trap::leftJoin(); 

Этот код будет жаловаться на отсутствие класса «Shorty \ Models \ Trap».

\Shorty\Models\Trap::leftJoin(); 

Как это:

use Shorty\Models\Trap; 

Trap::leftJoin(); 

Или это один:

namespace Shorty\Models; 

Trap::leftJoin(); 

Когда PHP жалуется на класс не присутствует, он всегда отображает полностью оцененную, окончательное название этого класса, после псевдонимов, относительных пространств имен и т. д.

+0

Sven, Wouter J, Росс благодарю всех вас. Я немного новичок в этом способе делать что-то, я сделал другое предположение, которое, как я понимаю, теперь было неправильным. Учебник, который я получил, содержал файл route.php, включающий в себя идентификационные файлы маршрутов в подпапке. У меня был комментарий использования в route.php, (я также пытался использовать файл start.php include), он работал только после того, как он переместил использование в файл с включенным файлом, который в этом случае является route/home.php. Возможно, я должен был разместить всю структуру каталогов. Вы все предоставили удивительную помощь. Еще раз спасибо. – TDawg

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