1

最近开始使用 UserFrosting 作为项目的一部分,我在 UserFrosting 中使用 Facades 时遇到了一些问题,如果可能的话,希望能得到一些帮助。

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

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 应用程序无法识别 File 门面(或任何其他 facacde - 我也尝试过存储),并且尚未在应用程序中注册。

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

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

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

提前致谢!

4

2 回答 2

1

外观文档

Laravel“门面”充当服务容器中底层类的“静态代理”......

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

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

您可以在initialize.php中为 UF 定义服务。因此,您可以尝试以下方法:

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

然后,您可以使用文件系统服务,例如:

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

于 2016-10-01T19:56:06.333 回答
0

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

File门面正在访问绑定的“文件”()Illuminate\Filesystem\Filesystem

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

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

它值得一试,但最重要的是正在解决的绑定问题。

于 2016-10-01T22:01:41.390 回答