检查输入是否来自控制台

cre*_*re8 8 laravel laravel-5 artisan laravel-5.4

我想与我分享我的观点变量:

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        \Schema::defaultStringLength(191);
        $customers = Customer::get();
        \View::share('customers', $customers);
    }
}
Run Code Online (Sandbox Code Playgroud)

它按预期工作,但是当我想通过工匠迁移我的表时,它会抛出一个错误,customers因为在迁移开始之前检查了表,因此找不到表.所以我需要类似的东西

if(!artisan_request) {
    //request to laravel is via web and not artisan
} 
Run Code Online (Sandbox Code Playgroud)

但我在文档中没有找到任何内容.

Ian*_*Ian 18

您可以使用检查是否在控制台中运行

app()->runningInConsole()
Run Code Online (Sandbox Code Playgroud)

在其下,它所做的就是检查接口类型

return php_sapi_name() == 'cli' || php_sapi_name() == 'phpdbg'
Run Code Online (Sandbox Code Playgroud)

您可以在PHP Docs站点上找到更多信息

  • @Buraco 一点也不。第一个是首选。我只是展示了该方法下面发生的事情。 (3认同)

Moz*_*mil 8

要检测应用程序是否在控制台中运行,您可以执行以下操作:

use Illuminate\Support\Facades\App;

if(App::runningInConsole())
{
  // app is running in console
}
Run Code Online (Sandbox Code Playgroud)

见,照亮/Foundation/Application.php:520