要启用调试器工具,我们修改 web / index.php 文件
defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'prod');
如何在自定义控制器中覆盖或更改这些变量?
class CommonController extends Controller {
public function init() {
$user_id = 1;
if($user_id == 1){
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
}
}
}
目标是为特定用户启用调试器。我知道有一种方法可以解决AllowedIps
。但是,我一直在寻找特殊的用户。有可能吗?
答案 0 :(得分:0)
基于此article
在某个地方创建了一个新类,我使用了common\components\Debug
。从yii\debug\Module
扩展它,并用所需的逻辑覆盖checkAccess()
。
<?php
namespace common\components;
class Debug extends \yii\debug\Module
{
private $_basePath;
protected function checkAccess()
{
$user = \Yii::$app->getUser();
if (
$user->identity &&
$user->can('admin')
) {
return true;
}
//return parent::checkAccess();
}
/**
* @return string root directory of the module.
* @throws \ReflectionException
*/
public function getBasePath()
{
if ($this->_basePath === null) {
$class = new \ReflectionClass(new \yii\debug\Module('debug'));
$this->_basePath = dirname($class->getFileName());
}
return $this->_basePath;
}
}
然后为您需要的应用更新您的main-local.php
if (!YII_ENV_TEST) {
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'common\components\Debug', // <--- Here
];
...
}
这当然将为所有用户运行调试器,但仅向管理员显示。这可能会给您的应用程序带来一些不必要的开销,但是调试过程会在检查身份之前开始。