使用 Laravel Facades with UserFrosting

Using Laravel Facades with UserFrosting

最近开始将 UserFrosting 作为项目的一部分使用,我在 UserFrosting 中使用 Facades 时遇到了一些问题,如果可能的话,我将不胜感激。

我正在尝试使用 UserFrosting 控制器中的 File 外观,使用以下代码在本地文件系统上创建一个文件夹

use Illuminate\Support\Facades\File; ...... $directoryCreated = File::makeDirectory($directoryPath);

但是在运行时我得到以下错误

PHP Fatal error: Call to a member function makeDirectory() on null in /var/www/test-app/userfrosting/vendor/illuminate/support/Facades/Facade.php on line 210

UserFrosting 应用程序似乎无法识别文件外观(或任何其他外观 - 我也尝试过存储)并且尚未在应用程序中注册。

是否可以将外观 类 与 UserFrosting 一起使用?

如果是这样,我是否必须在 UserFrosting 应用程序配置中的某处注册它们?

任何方向指示将不胜感激。

提前致谢!

来自Facade documentation

Laravel "facades" serve as "static proxies" to underlying classes in the service container...

所以,看起来 Laravel 的外观依赖于 Laravel 的服务容器。您可以在此处阅读有关 Laravel 如何设置默认外观的更多信息:https://www.sitepoint.com/how-laravel-facades-work-and-how-to-use-them-elsewhere/#how-laravel-aliases-the-facades

不幸的是,UserFrosting 不使用 Laravel 的服务容器。相反,它使用 Slim,它有自己的服务容器。在 Slim v2(UF 0.3.1 使用)中,Slim 应用程序本身 是服务容器。

您可以在 initialize.php 中为用友定义服务。所以,你可以尝试这样的事情:

$app->filesystem = new \Illuminate\Filesystem\Filesystem();

然后,您可以像这样使用文件系统服务:

$app->filesystem->makeDirectory($directoryPath);

您可以尝试使用 Slim 的容器来允许 Facade 解析其访问器(它将使用容器上的数组访问来解析它)。您必须确保外观使用的绑定存在。您可以查看与您要使用的服务对应的服务提供商,了解其如何设置绑定。

File 外观正在访问绑定 'files' (Illuminate\Filesystem\Filesystem)。

\Illuminate\Support\Facades\Facade::setFacadeApplication($container);

\Illuminate\Support\Facades\File::makeDirectory(...);

值得一试,但重要的是正在解析的绑定。