【问题标题】:Detect if running from the command line in Laravel 5检测是否从 Laravel 5 中的命令行运行
【发布时间】:2015-05-21 17:53:14
【问题描述】:

我有一个用例,如果应用程序通过 Artisan(迁移、种子、路由:列表)从命令行运行,我们需要修改应用程序流程。

在 Laravel 4 中可以这样完成:

App::runningInConsole()

在 Laravel 5 中是否有等价物?

在这种情况下不建议使用环境 (.env) 变量,因为这些命令有时需要在生产环境中运行(指向生产资源),我希望避免使用重复的 (.env.commandline)文件。

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    不确定任何以前的版本,但在 Laravel 5.2 中,您仍然可以使用 App::runningInConsole(),尽管文档中没有提及。

    【讨论】:

    • 我可以在版本5.0.35中使用它。
    • 已验证在 5.4.36 中工作可能只是一个命名空间问题。使用 \App::runningInConsole()
    • app()->runningInConsole()
    • 也可以在 Laravel 5.7 中使用
    • laravel 5.8 适用于 App::runningInConsole()app()->runningInConsole()
    【解决方案2】:

    您可以使用 PHP 函数 php_sapi_name (http://php.net/manual/en/function.php-sapi-name.php) 来确定脚本是否从命令启动。

    在你的情况下,你应该检查类似

    if (strpos(php_sapi_name(), 'cli') !== false) {
        // Run from command
    }
    

    不过,您可能必须检查文档以找到在每种情况下检查的正确值。 (有时可能会有所不同,但基本上通过命令启动的脚本应该总是有不同的输出)

    【讨论】:

    • 这项工作,希望像以前一样内置解决方案,但进一步的研究表明该功能已被弃用。标记为解决方案。
    • @ForrestMarvez 我不确定 100%,但我认为它在 Laravel 5 上已被标记为已弃用,因为每个服务器/配置上的函数结果并不总是相同。跨度>
    【解决方案3】:

    从 Laravel 5.1 开始,这有效...$app->runningInConsole() https://laravel.com/api/5.1/Illuminate/Foundation/Application.html

    基本用法:

    if (! $app->runningInConsole()) {
     // do something
    }
    

    【讨论】:

      【解决方案4】:

      任何人都可以使用 laravel app() 辅助函数来避免任何与命名空间相关的问题。所以要检查脚本是否在cli或浏览器中运行,可以使用这行代码app()->runningInConsole()

      基本用法:

      if ( app()->runningInConsole() ){
          // it's console.
      }
      

      【讨论】:

        猜你喜欢
        • 2020-01-10
        • 2016-09-11
        • 2015-04-19
        • 2015-07-12
        • 1970-01-01
        • 2013-04-28
        • 1970-01-01
        • 1970-01-01
        • 2015-08-06
        相关资源
        最近更新 更多