刚开始处理一个项目,我运行了composer update
,在尝试清除缓存时遇到了一个异常。
当我尝试运行php bin'console server:run
时,我会收到以下消息:
php bin'console server:run
PHP Fatal error: Uncaught Symfony'Component'Debug'Exception'FatalThrowableError: Fatal error: Class 'AppKernel' not found in CoreBundle'bin'console:27
Stack trace:
#0 {main}
thrown in CoreBundle'bin'console on line 27
Fatal error: Uncaught Symfony'Component'Debug'Exception'FatalThrowableError: Fatal error: Class 'AppKernel' not found in CoreBundle'bin'console on line 27
Symfony'Component'Debug'Exception'FatalThrowableError: Fatal error: Class 'AppKernel' not found in CoreBundle'bin'console on line 27
Call Stack:
0.0112 427536 1. Symfony'Component'Debug'ErrorHandler->handleException() CoreBundle'vendor'symfony'symfony'src'Symfony'Component'Debug'ErrorHandler.php:0
另一种强烈的可能性,特别是如果项目是从v2.7项目(或之前)更新的,就是Composer不知道AppKernel。现在的最佳做法是不手动要求/包括文件(因此这些行将从web/app_*.php
和bin/console.php
中删除)。而是自动加载。但是,这需要Composer中的一行,以便可以找到它。只有composer自动加载器会被手动包含,然后它可以加载其他所有内容。
"autoload": {
"files": ["app/AppKernel.php"],
"psr-4": { // etc...
这可能有两个原因。
首先你的自动加载器是垃圾或找不到文件
composer dump-autoload
第二个原因可能是,您的var
目录不可写,其中放置了symfony的缓存文件。只需检查权限即可。还要仔细查看日志文件。也许它告诉你真正的问题是什么。(比如语法问题等)
src/Kernel.php
添加到自动加载中。所以我的composer.json自动加载部分变成了:
"autoload" : {
"files": ["app/AppKernel.php",
"src/Kernel.php"],
"psr-4": { "": "src/"},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
}
添加这些之后,运行composer dump-autoload
就完成了任务。