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

时间:2015-06-03 23:55:30

标签: yii2

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

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

7 个答案:

答案 0 :(得分:18)

更正

Yii::$app->request->isConsoleRequest

答案 1 :(得分:15)

您可以使用

if (Yii::$app instanceof \yii\console\Application)

用于控制台,

if (Yii::$app instanceof \yii\web\Application)

for web。

答案 2 :(得分:4)

有一种更简单的方法可以在不通过Yii对象

的情况下解决这个问题
if (php_sapi_name() == "cli") {
    return;
}

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

答案 3 :(得分:1)

Yii2为应用程序consoleweb类型提供了许多不同的类。除了对类的操作模式进行这种划分之外,还有一组规则来管理应用程序代码的组织。第一,基本,它是给予MVC Model对象信息的方面,与用户一起查看管理界面,最后是控制器之间协调的作用。在您的情况下,似乎感觉到一段代码在控制台中运行,但引用了提供Web界面的类。可能是因为在某些Model类中引入了带有HTML或其他不应存在的代码的函数。如果您需要两个单独的应用程序,则应精确分离使用类型控件的应用程序

yii\console\Controller 

和另一个使用控制器类型web

yii\web\Controller. 

显然,模型类很常见,并且由于单独的控制器,请确保调用适合所用用户界面类型的View。我希望这可能有用。

答案 4 :(得分:1)

默认情况下为控制台:

Yii::$app->id == 'basic-console'

对于网络应用程序:

Yii::$app->id == 'basic'

Yii::$app->id存储已加载配置参数的id。默认情况下,控制台应用程序为'basic-console',对于Web应用程序,它为'basic'(在配置文件中定义)

答案 5 :(得分:0)

适用于Nginx和Apache:

function isConsole()
{
    return 'cli' == php_sapi_name() || !array_key_exists('REQUEST_URI', $_SERVER);
}

答案 6 :(得分:0)

纯PHP:

global $argv;
if (empty($argv)) {
  // Browser mode
}
else {
  // Cli mode
}