如何在拉拉维尔之外的包中使用Laravel外观(缓存,日志,存储)



请指出我对Laravel,Composer,PHPUnit等所做的任何幼稚或不正确的假设。

我有一个名为SpeechToTextHelper的类,它位于Laravel项目中,它使用了这样的外观:

use Cache;
use Log;
use Storage;

然后,由于我想在多个Laravel项目之间共享它,我将其移动到一个单独的存储库中,并通过Composer将其(放入第一个项目(作为依赖项。

代码似乎都运行良好。

我的问题与在拉拉维尔之外使用拉拉维尔外墙不同

我想知道的是:

  1. 现在我还想在我的新工具存储库中为 SpeechToTextHelper 编写 PHPUnit 测试,我看到了像RuntimeException: A facade root has not been set.Error: Class 'Log' not found这样的错误,大概是因为这个工具存储库没有意识到 Laravel。我想这意味着我的生产代码一直在工作,只是副作用。
  2. 在我的新工具存储库中(我的SpeechToTextHelper现在在哪里(,我应该如何指示(也许在composer.json的某个地方?(代码只有在Laravel的外观存在并正确启动时才有效?

如何修复我的单独存储库的代码,以便其测试可以运行,并确保它只能由Laravel项目"需要"?

附言 https://laravel.com/docs/5.7/facades 说:"在构建与 Laravel 交互的第三方包时,最好注入 Laravel 合约 (https://laravel.com/docs/5.7/contracts( [它们存在于自己的 GitHub 存储库中],而不是使用外观。"如果你正在构建一个包,你应该强烈考虑使用合约,因为它们在包上下文中更容易测试。

但我根本没有看到日志或存储的合同。

我想你正在寻找Laravel组件存储库

  1. 缓存 - 此组件显示如何在非Laravel应用程序中使用Laravel的缓存功能。

  2. 日志 - 此组件显示如何在非Laravel应用程序中使用Laravel的日志功能。

这个视频展示了,你如何使用雄辩的外部拉拉维尔,我认为这会给你更好的主意。

我不认为这是最好的方法,所以我希望其他人 会提供更好的答案。

对于生产代码

我的composer.json在"要求"部分仍然有这个:"laravel/framework": "5.7.*",.

我计划只要求Laravel应用程序中的此工具库。我不确定这是否是使其成为规则的正确方法,但我的生产代码至少似乎可以正常工作。

用于测试

至于测试,似乎有必要从 https://github.com/laravel/laravel/tree/2a1f3761e89df690190e9f50a6b4ac5ebb8b35a3 中添加这些文件:

app/Console/Kernel.php
app/Providers/AppServiceProvider.php
app/Providers/AuthServiceProvider.php
app/Providers/EventServiceProvider.php
app/Providers/RouteServiceProvider.php
bootstrap/cache/.gitignore
bootstrap/app.php
bootstrap/autoload.php
config/app.php
config/database.php
config/logging.php
config/view.php
storage/logs/laravel.log
tests/CreatesApplication.php
tests/TestCase.php

也许这些是最少的准系统Laravel文件集,没有这些文件,测试就无法运行。

然后我确保每个测试类都扩展tests/TestCase.php。我调整了命名空间。

相关内容

  • 没有找到相关文章

最新更新