首次运行时未编译 Laravel 类
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17688106/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Laravel class not being compiled on first run
提问by BayssMekanique
I used the tutorial posted on Net Tuts+ (http://hub.tutsplus.com/tutorials/combining-laravel-4-and-backbone--net-31745) and implemented the Error handling as instructed.
我使用了 Net Tuts+ ( http://hub.tutsplus.com/tutorials/combining-laravel-4-and-backbone--net-31745)上发布的教程,并按照说明实施了错误处理。
In the composer autoload section, I have the error.php file being loaded. It contains a class called NotFoundExceptionwhich is used to create exceptions for REST requests.
在 composer autoload 部分,我加载了 error.php 文件。它包含一个名为NotFoundException的类,用于为 REST 请求创建异常。
When I dump the autoload using artisan, it builds fine, and on the first run, I get the error "ReflectionException: Class NotFoundException does not exist". This ONLY happens on the first run after the dump. Subsequent runs are fine and when I run into an instance that triggers the exception, the exception class works. This error does appear each time I run my unit testing though, causing my tests to fail, but it only appears in the first file which calls the exception. I have 2 tests in 2 separate files which run and both use the exception as an assertion, and the first one gets and error, while the second one passes.
当我使用 artisan 转储自动加载时,它构建良好,并且在第一次运行时,我收到错误“ReflectionException:Class NotFoundException 不存在”。这仅在转储后的第一次运行时发生。后续运行很好,当我遇到触发异常的实例时,异常类工作。每次我运行单元测试时都会出现这个错误,导致我的测试失败,但它只出现在调用异常的第一个文件中。我在 2 个单独的文件中进行了 2 个测试,它们运行并且都使用异常作为断言,第一个获取并出错,而第二个通过。
I am still very new to Laravel, so it might be a simple fix, but am I missing something? Is there supposed to be another reference that I'm overlooking?
我对 Laravel 还是很陌生,所以这可能是一个简单的修复,但我错过了什么吗?是否应该有另一个我忽略的参考?
The output from the steps below:
以下步骤的输出:
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.
Here is the errors.php file:
这是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);
}
}
And finally, my composer.json file:
最后,我的 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"
}
回答by Jan P.
Try the following:
请尝试以下操作:
- Create the errors.php file and code your exceptions
- Put your file to the autload section of your root composer.json
Run in your laravel root:
php composer.phar dump-autoload php artisan clear-compiled php artisan optimize
- 创建 errors.php 文件并编写异常代码
- 将您的文件放到根 composer.json 的自动加载部分
在你的 Laravel 根中运行:
php composer.phar dump-autoload php artisan clear-compiled php artisan optimize
Please report :)
请报告:)
回答by Mahfuz-ur Rahman
it is old but somebody may need the solution of the problem. Please remove compiled.php then run composer update. It should be OK.
它很旧,但有人可能需要解决问题。请删除compiled.php,然后运行composer update。应该没问题。