1

Net Tuts+ ( http://hub.tutsplus.com/tutorials/combining-laravel-4-and-backbone--net-31745 ) に投稿されたチュートリアルを使用し、指示に従ってエラー処理を実装しました。

composer autoload セクションで、error.php ファイルをロードしています。これには、 REST 要求の例外を作成するために使用されるNotFoundExceptionというクラスが含まれています。

artisan を使用してオートロードをダンプすると、正常にビルドされ、最初の実行時に「ReflectionException: Class NotFoundException does not exist」というエラーが表示されます。これは、ダンプ後の最初の実行でのみ発生します。その後の実行は問題なく、例外をトリガーするインスタンスに遭遇すると、例外クラスが機能します。このエラーは、単体テストを実行するたびに表示され、テストが失敗しますが、例外を呼び出す最初のファイルにのみ表示されます。私は2つの別々のファイルに2つのテストを実行し、両方とも例外をアサーションとして使用し、最初のテストはエラーになり、2番目のテストは合格します。

私はまだLaravelに非常に慣れていないので、簡単な修正かもしれませんが、何か不足していますか? 私が見落としている別の参照があるはずですか?

以下のステップからの出力:

root@ubuntu:/var/www/api# composer dump-autoload
Generating autoload files
root@ubuntu:/var/www/api# php artisan clear-compiled
root@ubuntu:/var/www/api# php artisan optimize
Generating optimized class loader
Compiling common classes
root@ubuntu:/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"
}
4

2 に答える 2

7

次のことを試してください。

  • errors.php ファイルを作成し、例外をコーディングします
  • ファイルをルート composer.json の autoload セクションに配置します。
  • laravel ルートで実行します。

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

報告してください:)

于 2013-07-17T06:14:31.403 に答える
0

古いですが、誰かが問題の解決策を必要としているかもしれません。コンパイル済みの php を削除してから、composer update を実行してください。大丈夫なはずです。

于 2015-06-29T12:52:28.217 に答える