检测是否从Laravel 5中的命令行运行

For*_*vez 28 php laravel-5

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

在Laravel 4中,这可以这样做:

App::runningInConsole()
Run Code Online (Sandbox Code Playgroud)

Laravel 5中是否有相同的名称?

在这种情况下,使用环境(.env)变量不是首选,因为这些命令偶尔需要在生产中运行(指向生产资源),我宁愿避免使用重复(.env.commandline)文件.

Fah*_*hmi 35

不确定任何以前的版本,但在Laravel 5.2中你仍然可以做,App::runningInConsole()尽管文档中没有提到它.

  • laravel 5.8 使用 `App::runningInConsole()` 和 `app()->runningInConsole()` (7认同)
  • 验证在`5.4.36`中工作可能只是命名空间问题.使用`\ App :: runningInConsole()` (5认同)
  • app()-> runningInConsole() (4认同)
  • 在 Laravel 5.7 中也可用 (3认同)
  • 它也适用于Laravel 5.6和PHP 7.1.9 (2认同)

Clé*_*let 19

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

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

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

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


Bri*_*nCP 13

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

基本用法:

if (! $app->runningInConsole()) {
 // do something
}
Run Code Online (Sandbox Code Playgroud)


小智 7

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

基本用法:

if ( app()->runningInConsole() ){
    // it's console.
}
Run Code Online (Sandbox Code Playgroud)