Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Laravel外部的包中使用Laravel facades(缓存、日志、存储)_Laravel_Laravel 5_Dependencies_Composer Php_Phpunit - Fatal编程技术网

如何在Laravel外部的包中使用Laravel facades(缓存、日志、存储)

如何在Laravel外部的包中使用Laravel facades(缓存、日志、存储),laravel,laravel-5,dependencies,composer-php,phpunit,Laravel,Laravel 5,Dependencies,Composer Php,Phpunit,请指出我对拉威尔、作曲家、菲普尼特等所作的任何天真或不正确的假设 我有一个名为SpeechToTextHelper的类,它位于一个Laravel项目中,它使用如下外观: use Cache; use Log; use Storage; 然后,因为我想在多个Laravel项目之间共享它,所以我将它移动到一个单独的回购协议中,并通过Composer将其作为依赖项要求(进入第一个项目) 代码似乎运行良好 我的问题与你的不同 我想知道的是: 现在我还想在我的新工具repo中为SpeechToTextH

请指出我对拉威尔、作曲家、菲普尼特等所作的任何天真或不正确的假设

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

use Cache;
use Log;
use Storage;
然后,因为我想在多个Laravel项目之间共享它,所以我将它移动到一个单独的回购协议中,并通过Composer将其作为依赖项要求(进入第一个项目)

代码似乎运行良好

我的问题与你的不同

我想知道的是:

  • 现在我还想在我的新工具repo中为SpeechToTextHelper编写PHPUnit测试,我看到了一些错误,如
    RuntimeException:facade根尚未设置。
    错误:找不到类“Log”
    ,可能是因为这个工具repo没有意识到Laravel。我想这意味着我的生产代码一直在工作只是副作用
  • 在我的新工具repo(我的SpeechToTextHelper现在所在的位置)中,我应该如何表明(可能在composer.json中的某个地方)代码只有在Laravel的外观存在并且正确启动的情况下才能工作
  • 我如何修复我的独立回购协议的代码,使其测试可以运行,并确保它只能由一个Laravel项目“需要”

    P.S.说:“当构建与Laravel交互的第三方包时,最好注入Laravel契约(),而不是使用外观。”“如果您正在构建包,则应该强烈考虑使用合同,因为它们将更容易在包上下文中进行测试。”


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

    我认为您正在寻找Laravel组件存储库

  • 缓存-这显示了如何在非Laravel应用程序中使用Laravel的缓存功能

  • 日志-这显示了如何在非Laravel应用程序中使用Laravel的日志功能


  • 这表明,您可以如何在laravel之外使用雄辩的语言,我认为这将给您提供更好的想法。

    我认为您正在寻找laravel组件存储库

  • 缓存-这显示了如何在非Laravel应用程序中使用Laravel的缓存功能

  • 日志-这显示了如何在非Laravel应用程序中使用Laravel的日志功能

  • 这表明,你如何能使用雄辩的外部拉威尔,我认为这将给你更好的想法

    我不能肯定这是最好的方法,所以我希望其他人能这样做 将提供更好的答案

    用于生产代码

    我的
    composer.json
    在“require”部分中仍然有这样的内容:
    “laravel/framework”:“5.7.*”,

    我计划只从Laravel应用程序中需要此工具库。我不确定这是否是一种正确的方法来制定规则,但我的产品代码至少看起来是有效的

    用于测试

    至于测试,似乎有必要从以下位置添加这些文件:

    也许这些是最少的一组裸骨Laravel文件,没有这些文件,测试无法运行

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

    我不能肯定这是最好的方法,所以我希望其他人能这样做 将提供更好的答案

    用于生产代码

    我的
    composer.json
    在“require”部分中仍然有这样的内容:
    “laravel/framework”:“5.7.*”,

    我计划只从Laravel应用程序中需要此工具库。我不确定这是否是一种正确的方法来制定规则,但我的产品代码至少看起来是有效的

    用于测试

    至于测试,似乎有必要从以下位置添加这些文件:

    也许这些是最少的一组裸骨Laravel文件,没有这些文件,测试无法运行


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

    这很有趣,感觉它在正确的轨道上,但没有回答我的任何问题。例如,不使用日志外观。我不清楚什么是
    $app=new\Slim\app()意味着或者我将如何在PHPUnit测试中使用它来让它们与我的
    Log::debug
    调用一起工作。这很有趣,感觉它走上了正确的轨道,但没有回答我的任何问题。例如,不使用日志外观。我不清楚什么是
    $app=new\Slim\app()意味着或者我将如何在我的PHPUnit测试中使用它来让它们与我的
    Log::debug
    调用一起工作。相反,使用
    Log::debug
    我们可以尝试作为
    app('illighted\Support\Facades\Log')::debug
    ?@phpdroid我得到“一个门面根尚未设置”。实际上我对
    app()
    的存在方式感到困惑;我看不出这一点在这个项目中是如何定义的。但是Xdebug确实显示调用了
    app()
    ,但随后它抛出了RuntimeException。相反,使用
    Log::debug
    我们可以试试
    app('light\Support\Facades\Log')::debug
    ?@phpdroid我得到“一个门面根尚未设置”。实际上,我对
    app()
    的存在方式感到困惑;我看不出这一点在这个项目中是如何定义的。但是Xdebug确实显示调用了
    app()
    ,但随后它抛出了RuntimeException。
    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