使用 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 应用程序配置中的某处注册它们?
任何方向指示将不胜感激。
提前致谢!
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(...);
值得一试,但重要的是正在解析的绑定。
最近开始将 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 应用程序配置中的某处注册它们?
任何方向指示将不胜感激。
提前致谢!
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(...);
值得一试,但重要的是正在解析的绑定。