Недавно я начал использовать UserFrosting в качестве части проекта, и у меня возникли некоторые проблемы с использованием фасадов в UserFrosting, и я был бы признателен за некоторую помощь, если это возможно.
Я пытаюсь использовать File
фасад из контроллера UserFrosting для создания папки в локальной файловой системе, используя следующий код
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 служат в качестве «статических прокси» для базовых классов в контейнере службы …
Итак, похоже, что фасады 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 v2 (который использует UF 0.3.1) приложение Slim сам это сервисный контейнер.
Вы можете определить услуги для UF в initialize.php. Итак, вы можете попробовать что-то вроде:
$app->filesystem = new \Illuminate\Filesystem\Filesystem();
Затем позже вы можете использовать сервис файловой системы, например:
$app->filesystem->makeDirectory($directoryPath);
Вы можете попытаться использовать контейнер Slim, чтобы позволить Facade разрешить свой метод доступа (он будет использовать доступ к массиву для контейнера). Вы должны убедиться, что привязка, используемая фасадом, существует. Вы можете взглянуть на поставщика услуг, который соответствует услуге, которую вы хотите использовать, чтобы узнать, как она устанавливает привязку.
File
Фасад обращается к обязательным «файлам» (Illuminate\Filesystem\Filesystem
).
\Illuminate\Support\Facades\Facade::setFacadeApplication($container);
\Illuminate\Support\Facades\File::makeDirectory(...);
Это стоит попробовать, но в основном это обязательная решаемая задача, которая важна.