我正在编写一个从浏览器运行的应用程序。但是,也可以从Yii2控制台调用某些模型函数。因此,我在尝试访问GUI中设置的变量时遇到错误。
是否有可能分辨出我在哪种模式?是否有一些环境变量自动设置,或者我应该在控制台应用程序中设置一些会话变量来指示状态?
答案 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为应用程序console
和web
类型提供了许多不同的类。除了对类的操作模式进行这种划分之外,还有一组规则来管理应用程序代码的组织。第一,基本,它是给予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
}