2013-07-16 3 views
1

Я использовал учебник, размещенный в Net Tuts + (http://hub.tutsplus.com/tutorials/combining-laravel-4-and-backbone--net-31745), и реализовал обработку ошибок в соответствии с инструкциями.Класс Laravel не скомпилирован при первом запуске

В разделе автозагрузки композитора у меня загружен файл error.php. Он содержит класс NotFoundException, который используется для создания исключений для запросов REST.

Когда я сбрасываю автозагрузку с помощью мастера, он строит отлично, и при первом запуске я получаю сообщение об ошибке «ReflectionException: Class NotFoundException не существует». Это ТОЛЬКО случается при первом запуске после сброса. Последующие прогоны прекрасны, и когда я сталкиваюсь с экземпляром, который запускает исключение, класс исключений работает. Эта ошибка появляется каждый раз, когда я запускаю модульное тестирование, в результате чего мои тесты терпят неудачу, но они появляются только в первом файле, который вызывает исключение. У меня есть 2 теста в двух отдельных файлах, которые запускаются, и оба используют исключение в качестве утверждения, а первое - и ошибка, а вторая -.

Я все еще очень новичок в Laravel, так что это может быть простое исправление, но я что-то упускаю? Должна ли быть другая ссылка, которую я пропускаю?

Выход из шагов ниже:

[email protected]:/var/www/api# composer dump-autoload 
Generating autoload files 
[email protected]:/var/www/api# php artisan clear-compiled 
[email protected]:/var/www/api# php artisan optimize 
Generating optimized class loader 
Compiling common classes 
[email protected]:/var/www/api# phpunit 
PHPUnit 3.7.22 by Sebastian Bergmann. 

Configuration read from /var/www/api/phpunit.xml 

E........................................ 

Time: 2 seconds, Memory: 46.00Mb 

There was 1 error: 

1) AuthControllerTest::testProcess 
ReflectionException: Class NotFoundException does not exist 

/var/www/api/bootstrap/compiled.php:7539 
/var/www/api/bootstrap/compiled.php:7533 
/var/www/api/bootstrap/compiled.php:7508 
/var/www/api/bootstrap/compiled.php:7477 
/var/www/api/bootstrap/compiled.php:7472 
/var/www/api/vendor/composer/ClassLoader.php:185 
/var/www/api/vendor/composer/ClassLoader.php:185 
/var/www/api/bootstrap/compiled.php:165 
/var/www/api/bootstrap/compiled.php:142 
/var/www/api/bootstrap/compiled.php:444 
/var/www/api/bootstrap/compiled.php:83 
/var/www/api/bootstrap/compiled.php:163 
/var/www/api/bootstrap/compiled.php:142 
/var/www/api/bootstrap/compiled.php:444 
/var/www/api/bootstrap/compiled.php:186 
/var/www/api/bootstrap/compiled.php:175 
/var/www/api/bootstrap/compiled.php:142 
/var/www/api/bootstrap/compiled.php:444 
/var/www/api/bootstrap/compiled.php:4763 
/var/www/api/bootstrap/compiled.php:7834 
/var/www/api/bootstrap/compiled.php:7821 
/var/www/api/bootstrap/compiled.php:4775 
/var/www/api/bootstrap/compiled.php:483 
/var/www/api/bootstrap/compiled.php:490 
/var/www/api/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php:82 
/var/www/api/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php:324 
/var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:58 
/var/www/api/app/tests/controllers/AuthControllerTest.php:22 
/usr/share/php/PHPUnit/TextUI/Command.php:192 
/usr/share/php/PHPUnit/TextUI/Command.php:130 

FAILURES!                        
Tests: 41, Assertions: 38, Errors: 1.  

Вот файл errors.php:

<?php 

class PermissionException extends Exception { 

    public function __construct($message = null, $code = 403) 
    { 
     parent::__construct($message ? : 'Action not allowed', $code); 
    } 

} 

class ValidationException extends Exception { 

    protected $messages; 

    public function __construct($validator) 
    { 
     $this->messages = $validator->messages(); 
     parent::__construct($this->messages, 400); 
    } 

    public function getMessages() 
    { 
     return $this->messages; 
    } 

} 

class NotFoundException extends Exception { 

    public function __construct($message = null, $code = 404) 
    { 
     parent::__construct($message ? : 'Resource Not Found', $code); 
    } 

} 

И, наконец, мой файл composer.json:

{ 
     "name": "laravel/laravel", 
     "description": "The Laravel Framework.", 
     "keywords": ["framework", "laravel"], 
     "require": { 
      "laravel/framework": "4.0.*", 
      "way/generators": "dev-master", 
      "twitter/bootstrap": "dev-master", 
      "conarwelsh/mustache-l4": "dev-master", 
      "hybridauth/hybridauth": "*" 
     }, 
     "require-dev": { 
      "phpunit/phpunit": "3.7.*", 
      "mockery/mockery": "0.7.*" 
     }, 
     "autoload": { 
       "classmap": [ 
         "app/commands", 
         "app/controllers", 
         "app/models", 
         "app/database/migrations", 
         "app/database/seeds", 
         "app/tests/TestCase.php", 
         "app/ifr/interfaces", 
         "app/ifr/repositories", 
         "app/errors.php" 
       ] 
     }, 
     "scripts": { 
      "post-install-cmd": [ 
       "php artisan optimize" 
      ], 
      "pre-update-cmd": [ 
       "php artisan clear-compiled" 
      ], 
      "post-update-cmd": [ 
       "php artisan optimize" 
      ], 
      "post-create-project-cmd": [ 
       "php artisan key:generate" 
      ] 
     }, 
     "config": { 
       "preferred-install": "dist" 
     }, 
     "minimum-stability": "dev" 
} 
+1

Что именно у вас есть в части автозагрузки композитора? – rmobis

+1

Какой сервер/система вы используете? Может быть, есть какое-то местное кэширование или подобная проблема? – Laurence

ответ

7

Try следующие:

  • Создайте файл errors.php и закодировать ваши исключения
  • Поместите свой файл в разделе autload вашего корневого composer.json
  • Run в корне Laravel:

    php composer.phar dump-autoload 
    
    php artisan clear-compiled 
    
    php artisan optimize 
    

Пожалуйста report :)

+0

Я последовал этим шагам и добавил результаты к вопросу. – BayssMekanique

+0

Это то, что сработало и для меня. Благодарю. – Latheesan

0

это старый, но кому-то может понадобиться решение проблемы. Удалите compiled.php и запустите обновление для композитора. Все должно быть хорошо.

+1

Пожалуйста, добавьте информацию для OP о том, почему это работает. – JackWhiteIII

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