如何检测我是否处于"控制台"模式

Mar*_*tin 8 yii2

我正在编写一个从浏览器运行的应用程序.但是,也可以从Yii2控制台调用某些模型函数.因此,我在尝试访问GUI中设置的变量时遇到错误.

是否有可能分辨出我在哪种模式?是否有一些环境变量自动设置,或者我应该在控制台应用程序中设置一些会话变量来指示状态?

小智 19

正确的变种

Yii::$app->request->isConsoleRequest
Run Code Online (Sandbox Code Playgroud)

  • `isConsoleRequest`基本上是`PHP_SAPI ==='cli'`的快捷方式.这可能不如检查`Yii :: $ app`类型灵活.例如,对于从控制台运行的测试,您可能想要模拟Web应用程序.即使你有web应用程序,`isConsoleRequest`也会返回`true`.因此,当您想要使用PHP CLI功能而不是确定当前使用的应用程序类型时,这会更有用. (2认同)

小智 18

您可以使用

if (Yii::$app instanceof \yii\console\Application)
Run Code Online (Sandbox Code Playgroud)

对于控制台,和

if (Yii::$app instanceof \yii\web\Application)
Run Code Online (Sandbox Code Playgroud)

对于网络.


iGb*_*nam 5

Yii有一种更简单的方法可以在不遍历对象的情况下解决这个问题

if (php_sapi_name() == "cli") {
    return;
}
Run Code Online (Sandbox Code Playgroud)

...它适用于所有 PHP 脚本 ...而且它更轻