Yii2 如何检测我是否处于';控制台';模式
我正在编写一个从浏览器运行的应用程序。但是,也可以从Yii2控制台调用一些模型函数。因此,我在尝试访问GUI中设置的变量时出错 有可能知道我处于哪种模式吗?是否自动设置了一些环境变量,或者我应该在控制台应用程序中设置一些会话变量来指示状态?您可以使用Yii2 如何检测我是否处于';控制台';模式,yii2,Yii2,我正在编写一个从浏览器运行的应用程序。但是,也可以从Yii2控制台调用一些模型函数。因此,我在尝试访问GUI中设置的变量时出错 有可能知道我处于哪种模式吗?是否自动设置了一些环境变量,或者我应该在控制台应用程序中设置一些会话变量来指示状态?您可以使用 if (Yii::$app instanceof \yii\console\Application) 用于控制台,以及 if (Yii::$app instanceof \yii\web\Application) 对于web。Yii2为应用程序
if (Yii::$app instanceof \yii\console\Application)
用于控制台,以及
if (Yii::$app instanceof \yii\web\Application)
对于web。Yii2为应用程序的
控制台和web
类型的控制台提供了许多不同的类。除了对类的操作模式进行划分外,还有一组规则用于管理应用程序代码的组织。首先,最基本的一点是,提供MVC模型对象信息,查看与用户的管理界面,最后向控制器提供它们之间的协调作用。在您的例子中,似乎感觉到一段代码在控制台中运行,但引用了提供Web界面的类。可能是因为在一些模型类中引入了带有HTML或其他不应该存在的代码的函数。如果您需要两个独立的应用程序,则应该精确地将使用类型控件的应用程序分开
yii\console\Controller
另一种是使用控制器类型web
yii\web\Controller.
显然,模型类将是通用的,而且,由于使用了单独的控制器,请确保调用与所使用的用户界面类型相适应的视图。我希望这会有用。对于console,默认情况下:
Yii::$app->id == 'basic-console'
对于web应用程序:
Yii::$app->id == 'basic'
Yii::$app->id
存储加载的配置参数的id。默认情况下,对于控制台应用程序,它是'basic-console'
,而对于web应用程序,它是'basic'
(在配置文件中定义)有一种更简单的方法来解决这个问题,而无需查看Yii
对象
if (php_sapi_name() == "cli") {
return;
}
…它适用于所有PHP脚本
…而且它更轻正确的变体
Yii::$app->request->isConsoleRequest
适用于nginx和apache:
function isConsole()
{
return 'cli' == php_sapi_name() || !array_key_exists('REQUEST_URI', $_SERVER);
}
纯PHP:
global $argv;
if (empty($argv)) {
// Browser mode
}
else {
// Cli mode
}
isConsoleRequest
基本上是PHP\u SAPI==='cli'
的快捷方式。这可能不如检查Yii::$app
类型灵活。例如,对于从控制台运行的测试,您可能希望模拟web应用程序isConsoleRequest
将返回true
,即使您有web应用程序。因此,当您想使用PHPCLI功能而不是确定当前使用哪种类型的应用程序时,这更有用。最好且灵活的检查方法。