Автозагрузчик FuelPHP не может найти классы

У меня проблема с тем, что FuelPHP не может автоматически загружать классы. На моем промежуточном сервере (Ubuntu, PHP 5.3.10) он не может найти пользовательские классы в каталоге fuel/app/classes, а также не может запустить oil test (я получаю сообщение об ошибке sh: 1: phpunit: not found). Как ни странно, он отлично работает в моей локальной версии разработки (Windows, PHP 5.3.6).

Я подозревал, что это может быть как-то связано с Composer, который я впервые использую в этом проекте, но проблема не устранена, когда я закомментировал строку require APPPATH.'vendor/autoload.php'; из bootstrap.php (приложение по-прежнему не может загрузить пользовательские классы от fuel/app/classes)

Я в тупике: я использовал FuelPHP во многих проектах, и у меня никогда не было проблем с автозагрузчиком. Что особенно озадачивает, так это то, что один и тот же код работает нормально в одном месте и не работает в другом. Буду очень признателен за любые предложения, как это исправить.


person Nick F    schedule 10.10.2013    source источник
comment
Можете найти и выложить код автозагрузчика?   -  person Machavity♦    schedule 10.10.2013
comment
Я не трогал код автозагрузчика, кроме добавления этой единственной строки (требующей автозагрузчика Composer) в bootstrap.php. Автозагрузчик - это просто файл core/classes/autoloader.php из FuelPHP 1.6 (это большой файл, поэтому я не могу разместить его здесь).   -  person Nick F    schedule 10.10.2013
comment
Ради интереса попробуйте поставить свой собственный автозагрузчик и посмотреть, что произойдет. Убедитесь, что FuelPHP не использует старый __autoload() php.net /manual/en/function.spl-autoload-register.php   -  person Machavity♦    schedule 10.10.2013
comment
Нет смысла публиковать его здесь, репозиторий находится в сети на github. И ваш собственный автозагрузчик не будет работать, если вы не напишете совместимый. Поскольку он работает локально, для всех других ваших проектов и для тысяч других, первый вопрос: что отличается на этом сервере?   -  person WanWizard    schedule 10.10.2013
comment
Поскольку ваш локальный сервер - Windows: все ваши имена файлов в нижнем регистре? Права доступа к файлам установлены правильно?   -  person WanWizard    schedule 10.10.2013
comment
@WanWizard: хорошие моменты. Имена файлов не все в нижнем регистре, но: 1) некоторые классы (например, PHPUnit) являются сторонними, устанавливаются через Composer, поэтому регистр имени файла не зависит от меня; 2) еще один - загрузчик файлов (qqFileUploader), который я без проблем использовал в других проектах FuelPHP. Что касается разрешений, у меня такая же проблема, если я sudo php oil test в командной строке.   -  person Nick F    schedule 11.10.2013
comment
Хорошо, продолжайте: я думаю, это связано с регистром имени файла. Я изменил имена файлов своих пользовательских классов на нижний регистр, и они, кажется, работают (о, черт!) Однако имена файлов Composer / PHPUnit не в моих руках, поэтому я все еще не уверен, что делать там.   -  person Nick F    schedule 11.10.2013


Ответы (1)


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

создайте новый файл php с именем oil.php в каталоге app/config со следующим кодом:

<?php

// Unit tests will get shell error 'phpunit: command not found' unless
//  the path to php unit is specified.
 return array (
     'phpunit' => array (
         'binary_path' => 'fuel/vendor/bin/phpunit',
     ),
 );

Я использую топливо 1.7.2. Дополнительную информацию можно найти здесь.

Хотя приведенный выше код устранил определенные проблемы PHPunit, у меня все еще были проблемы с неработающими Fuel и автозагрузчиками. Топливный PHP не соответствует psr-4 (многие основные файлы топлива имеют несколько определений классов в одном файле), что может вызвать проблемы с некоторыми автозагрузчиками.

person turtlechief    schedule 17.12.2014