Autoloader на 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 за много проекти и никога не съм имал проблеми с Autoloader. Това, което е особено озадачаващо е, че един и същ код изглежда работи добре на едно място, а не на друго. Ще бъда много благодарен за всякакви предложения как да поправя това.


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 и автоматични зареждащи устройства. Fuel PHP не следва psr-4 (много от основните горивни файлове имат множество дефиниции на класове в един и същ файл), което може да причини проблеми с определени автозареждащи програми.

person turtlechief    schedule 17.12.2014