2016-10-01 37 views
1

最近是否開始使用UserFrosting來作爲項目的一部分,我在使用中UserFrosting外立面一些問題,如果可能的話希望得到一些幫助。使用Laravel外牆與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應用程序不識別該文件的門面(或任何其他facacde - 我也嘗試存儲),它^ h因爲未在應用程序中註冊。

是否有可能與UserFrosting使用門面類?

如果這樣做我的UserFrosting應用程序配置中的某處進行註冊?

任何方向指針將不勝感激。

在此先感謝!

回答

0

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用友定義服務。所以,你可以嘗試這樣的:

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

後來的後來,你可以像使用文件系統服務:

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

+0

感謝@alexw這個方向。我已經直接在控制器中導入並實例化了文件系統對象,以使用makeDirectory方法,但是您的建議會更加優雅,尤其適用於其他地方的重用。 – dazoido

0

你可以嘗試使用修身的容器,讓門面來解決它的訪問器(它將使用容器上的數組訪問來解決它)。你將不得不確保立面使用的綁定存在。您可以查看與您想要使用的服務相對應的服務提供商,以瞭解如何設置綁定。

File門面正在訪問結合 '文件'(Illuminate\Filesystem\Filesystem)。

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

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

它值得一試,但其主要是正在解決的重要綁定。

+0

謝謝@lagbox會進一步調查此選項。結束直接實例化文件系統對象直接創建目錄,但最終希望能夠在本地和雲存儲之間進行交換,因此希望使用Facades(文件或存儲)。這可能會讓我更近一步。 – dazoido