使用Laravel Facade和UserFrosting

时间:2016-10-01 18:42:33

标签: php laravel-5 userfrosting

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

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

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

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

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

任何方向指针都会非常感激。

提前致谢!

2 个答案:

答案 0 :(得分:1)

来自Facade documentation

  

Laravel"外墙"作为"静态代理"到服务容器中的底层类......

因此,看起来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中为UF定义服务。所以,你可以尝试类似的东西:

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

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

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

答案 1 :(得分:0)

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

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

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

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

它值得一试,但它主要是正在解决的绑定很重要。