在ii
代码行中,我们正在检查调试是否先前已定义它什么都不做,但如果没有,它将设置为defined('YII_DEBUG') or define('YII_DEBUG', false);
。
我没有得到这个我的意思是如果我们想要覆盖以前的值以及为什么我们不能简单地执行false
为什么有必要检查以前的值如果我们不想使用它?
答案 0 :(得分:2)
您只需执行以下操作即可将其快速更改为true
或false
到页面:
define('YII_DEBUG', true);
在这种情况下,defined('YII_DEBUG') or define('YII_DEBUG', false);
会派上用场,它会检查YII_DEBUG
是true
还是false
,如果发现YII_DEBUG
已设置为true
1}}或false
在其他地方,然后它就不会执行or
部分。
此defined('YII_DEBUG') or define('YII_DEBUG', true);
相当于
if (!defined('YII_DEBUG')) {
define('YII_DEBUG', true);
}
所以,你看到它会检查是否在其他地方定义了YII_DEBUG
,如果没有,那么在这种情况下它会设置为true
。
修改强>
要动态调试任何页面,您可以这样做:
if (isset($_GET['debug'])) define('YII_DEBUG', true);
当然,您必须更改您的网址,例如:
www.example.com/site/myAction
到www.example.com/site/myAction/debug/true
并将其从index.php
编辑2:
在YII_DEBUG
中定义index.php
并非强制要求,它在Yii
应用程序中定义,如果{{1},您可以在根yii.php
文件中找到它如果Yii2
在Yii1
答案 1 :(得分:2)
我没有这样做,但你不清楚我的问题,我们只能更改/web/index.php中的YII_DEBUG值。还有一件事,如果YII_DEBUG已经定义了其他任何地方,但在此之后,如果我们想要改变它的价值,该怎么做,因为'或'不会改变它,它也是不变的,所以不能改变它的价值?
是的,你错了......你可以在任何你想要的地方声明YII_DEBUG值,但是......如果它被重新定义: 注意:常量YII_DEBUG已在...中定义 我认为这是定义()或...的原因,以防止这种错误
答案 2 :(得分:1)
<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
在yourApp/web/index.php
这个costant定义了一个调试信息级别。 在开发环境中,通常将此标志设置为true,然后在出现错误的情况下显示有关错误的详细信息以及解决错误的代码,如果错误没有或显示的信息很少。
在生产环境中,这个常数被设定为假。因此,向用户显示负信息。
用于定义或定义
是costant已定义不需要定义否则php定义constat。看php doc http://php.net/manual/en/function.defined.php
defined — Checks whether a given named constant exists
您可以在Yii2 doc http://www.yiiframework.com/doc-2.0/guide-runtime-handling-errors.html
中找到更多信息答案 3 :(得分:1)
错误处理程序根据常量YII_DEBUG
的值调整错误显示。当YII_DEBUG
为真时(意味着在调试模式下),错误处理程序将显示具有详细调用堆栈信息和源代码行的异常,以帮助更轻松地进行调试。如果YII_DEBUG
为false,则仅显示错误消息,以防止泄露有关应用程序的敏感信息。
答案 4 :(得分:1)
defined('YII_DEBUG') or define('YII_DEBUG', false)
检查是否定义了常量YII_DEBUG
(无论其值如何),如果之前未定义,则将常量定义为false
。
该行确保定义常量以便可以使用它,并且它的第一部分(defined('YII_DEBUG') or
)确保该行不会覆盖false
,如果它被设置为{{1}早些时候。