2025-04-10 23:19:13 +08:00

203 lines
4.5 KiB
PHP
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace mdm\admin\components;
use Yii;
use yii\db\Connection;
use yii\caching\Cache;
use yii\helpers\ArrayHelper;
use yii\di\Instance;
/**
* Configs
* Used for configure some value. To set config you can use [[\yii\base\Application::$params]]
*
* ```
* return [
*
* 'mdm.admin.configs' => [
* 'db' => 'customDb',
* 'menuTable' => '{{%admin_menu}}',
* 'cache' => [
* 'class' => 'yii\caching\DbCache',
* 'db' => ['dsn' => 'sqlite:@runtime/admin-cache.db'],
* ],
* ]
* ];
* ```
*
* or use [[\Yii::$container]]
*
* ```
* Yii::$container->set('mdm\admin\components\Configs',[
* 'db' => 'customDb',
* 'menuTable' => 'admin_menu',
* ]);
* ```
*
* @author Misbahul D Munir <misbahuldmunir@gmail.com>
* @since 1.0
*/
// class Configs extends \yii\base\Object //更新使用7.2以上版本PHP后不再可使用Object类 By fm453
class Configs extends \yii\base\BaseObject
{
const CACHE_TAG = 'mdm.admin';
/**
* @var Connection Database connection.
*/
public $db = 'db';
/**
* @var Cache Cache component.
*/
public $cache = 'cache';
/**
* @var integer Cache duration. Default to a hour.
*/
public $cacheDuration = 3600;
/**
* @var string Menu table name.
*/
public $menuTable = '{{%c_menu}}';
/**
* @var string Menu table name.
*/
//public $userTable = '{{%user}}';
public $userTable = '{{%c_adminer}}';
/**
* @var integer Default status user signup. 10 mean active.
*/
public $defaultUserStatus = 10;
/**
* @var boolean If true then AccessControl only check if route are registered.
*/
public $onlyRegisteredRoute = false;
/**
* @var boolean If false then AccessControl will check without Rule.
*/
public $strict = true;
/**
* @var array
*/
public $options;
/**
* @var self Instance of self
*/
private static $_instance;
private static $_classes = [
'db' => 'yii\db\Connection',
'cache' => 'yii\caching\Cache',
];
/**
* @inheritdoc
*/
public function init()
{
foreach (self::$_classes as $key => $class) {
try {
$this->{$key} = empty($this->{$key}) ? null : Instance::ensure($this->{$key}, $class);
} catch (\Exception $exc) {
$this->{$key} = null;
Yii::error($exc->getMessage());
}
}
}
/**
* Create instance of self
* @return static
*/
public static function instance()
{
if (self::$_instance === null) {
$type = ArrayHelper::getValue(Yii::$app->params, 'mdm.admin.configs', []);
if (is_array($type) && !isset($type['class'])) {
$type['class'] = static::className();
}
return self::$_instance = Yii::createObject($type);
}
return self::$_instance;
}
public static function __callStatic($name, $arguments)
{
$instance = static::instance();
if ($instance->hasProperty($name)) {
return $instance->$name;
} else {
if (count($arguments)) {
$instance->options[$name] = reset($arguments);
} else {
return array_key_exists($name, $instance->options) ? $instance->options[$name] : null;
}
}
}
/**
* @return Connection
*/
public static function db()
{
return static::instance()->db;
}
/**
* @return Cache
*/
public static function cache()
{
return static::instance()->cache;
}
/**
* @return integer
*/
public static function cacheDuration()
{
return static::instance()->cacheDuration;
}
/**
* @return string
*/
public static function menuTable()
{
return static::instance()->menuTable;
}
/**
* @return string
*/
public static function userTable()
{
return static::instance()->userTable;
}
/**
* @return string
*/
public static function defaultUserStatus()
{
return static::instance()->defaultUserStatus;
}
/**
* @return boolean
*/
public static function onlyRegisteredRoute()
{
return static::instance()->onlyRegisteredRoute;
}
/**
* @return boolean
*/
public static function strict()
{
return static::instance()->strict;
}
}