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

问题描述 投票:7回答:6

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

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

yii2
6个回答
15
投票

您可以使用

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

对于控制台,和

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

对于网络。


18
投票

正确的变种

Yii::$app->request->isConsoleRequest

4
投票

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

if (php_sapi_name() == "cli") {
    return;
}

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


1
投票

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

yii\console\Controller 

和另一个使用控制器类型的网络

yii\web\Controller. 

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


1
投票

默认情况下为控制台:

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

对于Web应用程序:

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

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


0
投票

适用于nginx和apache:

function isConsole()
{
    return 'cli' == php_sapi_name() || !array_key_exists('REQUEST_URI', $_SERVER);
}
© www.soinside.com 2019 - 2024. All rights reserved.