簡體   English   中英

Laravel 中的 Storage facade 如何“擴展”,為什么我的代碼表現如此奇怪?

[英]How works "extend" of Storage facade in Laravel, and why my code behaves so strange?

我想像這樣向我的流明應用程序添加額外的雲驅動程序:

Storage::extend('s3_v2', static function ($app, array $config) {
    return (new FilesystemManager($app))->createS3Driver($config);
});

所以,它起作用了。 這是一個問題。 當我使用 Storage::put()/makedir() 等時,即使默認情況下我有另一個雲驅動程序,它也能正常工作。 閉包中的代碼不起作用(前者為 Log::info()),可能是因為我使用了另一個 S3 雲驅動程序,但如果我刪除這段代碼,我將遇到此錯誤:

憑據必須是 Aws\Credentials\CredentialsInterface 的一個實例,一個包含“key”、“secret”和一個可選的“token”鍵值對的關聯數組,一個憑據提供程序 function,或者 false。 (500內部服務器錯誤)

如果我將驅動程序更改為當前默認值,它將起作用,並且回調中的所有附加邏輯都會執行:

Storage::extend('minio', static function ($app, array $config) {
    Log::error('test'); // Log successful output-ed
    return (new FilesystemManager($app))->createS3Driver($config);
});

它的作品......而不是? 這就像如果我使用另一個驅動程序它不會進入閉包,但它正在注冊該驅動程序......所以如果我正在擴展當前驅動程序它會注冊它並執行回調(???)所以我非常使困惑。

需要說明的是,我的應用程序中沒有其他 Storage::extend 了。 而如果:

Storage::extend('ASDASDASD', static function ($app, array $config) {
    return (new FilesystemManager($app))->createS3Driver($config);
});

它還允許我正確地使用我當前的雲驅動程序,但回調不會執行。 我可以通過打開 minio 控制台並在那里查看添加的文件來驗證這一點

我找到了問題的答案。 無論給定的驅動程序名稱及其回調如何,存儲外觀的方法“擴展”都會執行。 它只是使用來自第一個參數的鍵將給定的回調添加到 FilesystemManager 實例的數組屬性。 它還從配置中執行所有驅動程序的注冊,而不僅僅是在第一個參數中添加。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM