【问题标题】:Laravel 5.6 - Uncaught RuntimeException: A facade root has not been setLaravel 5.6 - 未捕获的 RuntimeException:尚未设置外观根
【发布时间】:2018-04-13 13:23:33
【问题描述】:

当我尝试在课堂上使用 Illuminate\Http\Request 时出现以下错误。

错误:

PHP Fatal error:  Uncaught RuntimeException: A facade root has not been set. in /home/sasha/Documents/OffProjects/vetnearme/vetnearme/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:218
Stack trace:
#0 /home/sasha/Documents/OffProjects/vetnearme/vetnearme/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(396): Illuminate\Support\Facades\Facade::__callStatic('replaceNamespac...', Array)
#1 /home/sasha/Documents/OffProjects/vetnearme/vetnearme/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(373): Illuminate\Foundation\Exceptions\Handler->registerErrorViewPaths()
#2 /home/sasha/Documents/OffProjects/vetnearme/vetnearme/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(288): Illuminate\Foundation\Exceptions\Handler->renderHttpException(Object(Symfony\Component\HttpKernel\Exception\HttpException))
#3 /home/sasha/Documents/OffProjects/vetnearme/vetnearme/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php(187): Illumina in /home/sasha/Documents/OffProjects/vetnearme/vetnearme/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 218  

有问题的班级:

namespace App\App\Components;

use Illuminate\Http\Request;

/**
 * This class will be used to build menu for admin panel based on the user role
 */
class AdminPanelMenu {

    static function menu(Request $request){

        $user = $request->user();

        if($user->hasRole['super_admin'])
            return self::superAdmin();

        if($user->hasRole['admin'])
            return self::admin();

        if($user->hasRole['user'])
            return self::user();

        return [];

    }

    private static function superAdmin()
    {
        return [
            'MAIN NAVIGATION',
        ];
    }

    private static function admin()
    {
        return [
            'MAIN NAVIGATION',
        ];
    }

    private static function user()
    {
        return [
            'MAIN NAVIGATION',
        ];
    }

}

我在这里做错了什么?

【问题讨论】:

  • 我只是为那些面临相同问题但即使按照接受的答案中的建议进行更改后仍无法解决的人添加解决方案。由于 SELinux 正在运行,这可能是一个问题。尝试禁用 SELinux,如果可行,您需要使用 $sudo chcon -t httpd_sys_rw_content_t /path/to/your/laravel/project/dir -R 更改上下文。我设法像这样解决了我的问题。

标签: laravel laravel-5


【解决方案1】:

您需要创建一个新的应用容器,然后将其绑定到 Facade。

use \Illuminate\Container\Container as Container;
use \Illuminate\Support\Facades\Facade as Facade;

/**
* Setup a new app instance container
* 
* @var Illuminate\Container\Container
*/
$app = new Container();
$app->singleton('app', 'Illuminate\Container\Container');

/**
* Set $app as FacadeApplication handler
*/
Facade::setFacadeApplication($app);

流明: bootstrap/app.php

$app->withFacades();

祝你好运!

【讨论】:

  • 所以,我迷路了:D。我需要在哪里制作新的应用容器?
  • @Adam Kozlowski 我面临同样的错误,但在不同的地方(未捕获的 RuntimeException:尚未设置外观根。在供应商/laravel/framework/src/Illuminate/Support/Facades/Facade。 php:218) 在 php 7.1.8 上全新安装 Laravel 5.6 后。我使用composer安装了它,安装时没有遇到任何问题。我已按照安装指南中的说明为目录提供了足够的权限,并且主机也已正确配置。如果我可以按照您建议的方式解决它,您能帮我吗?立面概念对我来说很新。
  • 也丢了,还在找app容器的位置
  • 尝试在 bootstrap/app.php 中执行此操作,然后清除缓存
  • bootstrap/app.php 在 Laravel 5.3 下(我知道,已经过时)已经有一个 $app 实例:Illuminate\Foundation\Application 正在使用。我用Log 门面得到这个。编辑:提到 5.6,好吧。
【解决方案2】:

我知道这是旧的,但也许它会帮助某人。我在摆弄我的 app/config.php 文件后遇到了这个问题。我添加了一些选项,不小心在它后面放了一个分号而不是逗号。 我有:

'vapid_public_key'   => env('VAPID_PUBLIC_KEY'); <--- offending semi-colon
'vapid_private_key'  => env('VAPID_PRIVATE_KEY'),

将其更改为正确的逗号,一切都按预期工作。

【讨论】:

  • 谢谢!我的罪行是定义这样的配置属性:'readings_key' = env('WATER_READINGS_KEY') // 应该是 '=>'
【解决方案3】:

真的迟到了,但希望可以帮助别人。我发现这个错误最简单的解决方案就是改变这个错误出现的页面的路径(即从/post 到/posts)。并且不要忘记更改与它有直接链接的任何地方。

【讨论】:

    【解决方案4】:

    我认为问题在于 Laravel 将范围解析与外观错误混淆了。检查您的代码,以确保您没有任何类中不存在的静态变量。例如,如果你有一个像这样的 PHP 类;

    <?php 
    
      class StaticExample 
      {
        public const EXAM = 'exam';
      }
    
      ?>
    

    然后你尝试调用一个不存在的 const StaticExample::EXAMS。 Laravel 会给你上面的错误,这是没有意义的,因为它很难追踪。日志中没有错误,您就迷路了。

    我的解决方案是使用像 PHPStorm 这样的编辑器来指出您的开发错误。另一种方法是您应该很好地检查您的范围分辨率。

    【讨论】:

      猜你喜欢
      • 2020-08-22
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 2019-11-05
      • 2021-10-13
      • 2020-05-18
      相关资源
      最近更新 更多