Laravel 5.6出现'A facade root has not been set'错误的解决求助
我刚在PHP 7.1.8(Fedora 23)环境下用Composer装完Laravel 5.6,打开对应URL就碰到了这个致命错误:
PHP Fatal error: Uncaught RuntimeException: A facade root has not been set. in vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:218
Stack trace:
#0 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(396): Illuminate\Support\Facades\Facade::__callStatic('replaceNamespac...', Array)
#1 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(373): Illuminate\Foundation\Exceptions\Handler->registerErrorViewPaths()
#2 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(288): Illuminate\Foundation\Exceptions\Handler->renderHttpException(Object(Symfony\Component\HttpKernel\Exception\HttpException))
#3 vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(187): Illuminate\Foundation\Exceptions\Handler->prepareResponse(Object(Illuminate\Http\Request), Object(Symfony\Co in vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 218
安装过程没报错,也给Apache设置了目录写入权限,试了下面几个方法终于解决了,分享给你:
常见修复步骤
1. 补全.env文件并生成应用密钥
刚安装的Laravel默认只有.env.example模板文件,必须复制生成.env并设置密钥:
# 复制模板生成.env cp .env.example .env # 生成应用密钥(自动写入.env的APP_KEY字段) php artisan key:generate
Laravel的门面(Facade)依赖APP_KEY来完成初始化,没有这个密钥就会触发这个错误。
2. 重新确认目录权限
虽然你已经设置了权限,但再检查下这两个关键目录的权限是否正确:
storage/:存放日志、缓存等文件bootstrap/cache/:存放配置缓存
执行以下命令设置权限(Fedora下Apache用户是apache):
chmod -R 775 storage bootstrap/cache chown -R apache:apache storage bootstrap/cache
3. 清除所有缓存文件
如果之前不小心运行过缓存命令,可能导致配置失效,执行以下命令清空所有缓存:
php artisan config:clear php artisan cache:clear php artisan view:clear
4. 检查Apache虚拟主机配置
确保你的虚拟主机指向的是Laravel项目的public/目录,而不是项目根目录。正确的配置应该类似这样:
<VirtualHost *:80> ServerName your-domain.local DocumentRoot /var/www/laravel-project/public <Directory /var/www/laravel-project/public> AllowOverride All Require all granted </Directory> </VirtualHost>
如果指向根目录,Laravel的入口文件index.php不会被正确加载,自然会引发门面初始化失败的问题。配置修改后记得重启Apache:
systemctl restart httpd
5. 确认必备PHP扩展已安装
Laravel 5.6需要几个核心PHP扩展,用php -m命令检查是否安装了以下扩展:
- OpenSSL
- PDO
- Mbstring
- Tokenizer
- XML
- Ctype
- JSON
如果缺失,用Fedora的包管理器安装:
dnf install php-openssl php-pdo php-mbstring php-tokenizer php-xml php-ctype php-json
安装完成后重启Apache服务:
systemctl restart httpd
内容的提问来源于stack exchange,提问作者FMoridhara

