最近开始使用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应用程序配置中的某个位置注册它们吗?
任何方向指针都会非常感激。
提前致谢!
答案 0 :(得分:1)
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(...);
它值得一试,但它主要是正在解决的绑定很重要。