set() public static méthode

设置配置参数 name为数组则为批量设置
public static set ( string | array $name, mixed $value = null, string $range = '' ) : mixed
$name string | array 配置参数名(支持二级配置 .号分割)
$value mixed 配置值
$range string 作用域
Résultat mixed
Exemple #1
0
 public function testFill()
 {
     $model = new Model('', $this->getConfig());
     $data = ['username' => '', 'nickname' => 'nickname', 'phone' => ' 123456', 'hobby' => ['1', '2'], 'cityid' => '1', 'a' => 'a', 'b' => 'b'];
     $auto = ['user' => ['__option__' => ['value_fill' => 'username,password,phone', 'exists_fill' => 'nickname'], 'username' => ['strtolower', 'callback'], 'password' => ['md5', 'callback'], 'nickname' => [[&$this, 'fillName'], 'callback', 'cn_'], 'phone' => function ($value, $data) {
         return trim($value);
     }, 'hobby' => ['', 'serialize'], 'cityid' => ['1', 'ignore'], 'address' => ['address'], 'integral' => 0, ['reg_time', 'time', 'callback'], ['login_time', function ($value, $data) {
         return $data['reg_time'];
     }], 'ab' => ['a,b', 'serialize']]];
     \think\Config::set('auto', $auto);
     $result = $model->auto('user')->create($data);
     $data['nickname'] = 'cn_nickname';
     $data['phone'] = '123456';
     $data['hobby'] = serialize($data['hobby']);
     $data['address'] = 'address';
     $data['integral'] = 0;
     $data['reg_time'] = time();
     $data['login_time'] = $data['reg_time'];
     $data['ab'] = serialize(['a' => 'a', 'b' => 'b']);
     unset($data['cityid'], $data['a'], $data['b']);
     $this->assertEquals($data, $result);
     // 测试带.和*的键名
     $data = ['name' => ['a' => 'a', 'b' => 'b'], 'goods' => [0 => [0 => ['item' => 'item', 'price' => ''], 1 => ['item' => 'item2', 'price' => '']]]];
     $test = ['name.*' => 'name', 'goods.*.*.price' => 100];
     $result = $model->auto($test)->create($data);
     $data['name']['a'] = $data['name']['b'] = 'name';
     $data['goods'][0][0]['price'] = 100;
     $data['goods'][0][1]['price'] = 100;
     $this->assertEquals($data, $result);
 }
Exemple #2
0
function C($name = '', $value = null, $range = '')
{
    if (is_null($value) && is_string($name)) {
        return \think\Config::get($name, $range);
    } else {
        return \think\Config::set($name, $value, $range);
    }
}
Exemple #3
0
 protected function set_theme($name)
 {
     $tmp = Config::get('template');
     if ($name) {
         $tmp['view_path'] = realpath(APP_PATH . '../public/themes/' . $name) . DS;
     } else {
         $tmp['view_path'] = "";
     }
     Config::set('template', $tmp);
 }
Exemple #4
0
 public function testConfig()
 {
     App::run(Config::get());
     Config::parse('isTrue=1', 'test');
     Config::range('test');
     $this->assertTrue(Config::has('isTrue'));
     $this->assertEquals(1, Config::get('isTrue'));
     Config::set('isTrue', false);
     $this->assertEquals(0, Config::get('isTrue'));
     Config::reset();
 }
Exemple #5
0
 public function testConfig()
 {
     App::run();
     $this->assertTrue(Config::has('url_route_on'));
     $this->assertEquals(1, Config::get('url_route_on'));
     Config::set('url_route_on', false);
     $this->assertEquals(0, Config::get('url_route_on'));
     Config::range('test');
     $this->assertFalse(Config::has('url_route_on'));
     Config::reset();
 }
Exemple #6
0
 /**
  * 架构函数
  * 遍历合并Config
  *
  * @return void
  */
 public function __construct()
 {
     if (!empty($this->options)) {
         foreach ($this->options as $name => $val) {
             // 参数已设置 则覆盖行为参数
             if (Config::get($name) !== null) {
                 $this->options[$name] = C($name);
             } else {
                 Config::set($name, $val);
             }
         }
         array_change_key_case($this->options);
     }
 }
Exemple #7
0
 public function testDetect()
 {
     Config::set('lang_list', ['zh-cn', 'zh-tw']);
     Lang::set('hello', '欢迎', 'zh-cn');
     Lang::set('hello', '歡迎', 'zh-tw');
     Config::set('lang_detect_var', 'lang');
     Config::set('lang_cookie_var', 'think_cookie');
     $_GET['lang'] = 'zh-tw';
     Lang::detect();
     $this->assertEquals('歡迎', Lang::get('hello'));
     $_GET['lang'] = 'zh-cn';
     Lang::detect();
     $this->assertEquals('欢迎', Lang::get('hello'));
 }
Exemple #8
0
 public function testRun()
 {
     Config::set('root_namespace', ['/path/']);
     App::run();
     $expectOutputString = '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_bd568ce7058a1091"></thinkad>';
     $this->expectOutputString($expectOutputString);
     $rc = new ReflectionClass('\\think\\Loader');
     $ns = $rc->getProperty('namespace');
     $ns->setAccessible(true);
     $this->assertEquals(true, in_array('/path/', $ns->getValue()));
     $this->assertEquals(true, function_exists('L'));
     $this->assertEquals(true, function_exists('C'));
     $this->assertEquals(true, function_exists('I'));
     $this->assertEquals(Config::get('default_timezone'), date_default_timezone_get());
 }
Exemple #9
0
 public function testRun()
 {
     Config::set('root_namespace', ['/path/']);
     App::run();
     $expectOutputString = '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p>欢迎使用 <b>ThinkPHP5</b>!</p></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_bd568ce7058a1091"></thinkad>';
     $this->expectOutputString($expectOutputString);
     $rc = new ReflectionClass('\\think\\Loader');
     $ns = $rc->getProperty('namespace');
     $ns->setAccessible(true);
     $this->assertEquals(true, in_array('/path/', $ns->getValue()));
     $this->assertEquals(true, function_exists('L'));
     $this->assertEquals(true, function_exists('C'));
     $this->assertEquals(true, function_exists('I'));
     $this->assertEquals(Config::get('default_timezone'), date_default_timezone_get());
 }
Exemple #10
0
 /**
  * 加载系统扩展配置
  */
 public static function load()
 {
     $config = \think\Cache::get('db_config_cache_data');
     if (!$config) {
         // 在这里先判断一下数据库是否已经正确安装
         $Db = \think\Loader::db();
         $Query = $Db->query("SHOW TABLES LIKE '" . \think\Config::get('database.prefix') . "config'");
         if (empty($Query)) {
             self::install();
         }
         $data = \think\Db::name('Config')->where('status', 1)->field('type,name,value')->select();
         $config = [];
         if ($data && is_array($data)) {
             foreach ($data as $value) {
                 $config[$value['name']] = self::parse($value['type'], $value['value']);
             }
         }
         \think\Cache::set('db_config_cache_data', $config);
     }
     \think\Config::set($config);
 }
Exemple #11
0
/**
 * 重写C方法,改为引用Config方法
 *
 * @param string $name
 */
function C($name = null, $value = null)
{
    // 无参数时获取所有
    if (empty($name)) {
        return Config::getAll();
    }
    // 字符串,为空则获取
    if (is_string($name) && is_null($value)) {
        return Config::get($name);
    }
    // 字符串,不为空则单个设置
    if (is_string($name) && !is_null($value)) {
        return Config::set($name, $value);
    }
    // 数组设置
    if (is_array($name)) {
        return Config::setAll($name);
    }
    // 避免非法参数
    Debug::throw_exception('C funtion error!');
}
Exemple #12
0
 public function testFill()
 {
     $data = ['username' => '', 'nickname' => 'nickname', 'phone' => ' 123456', 'hobby' => ['1', '2'], 'cityid' => '1', 'a' => 'a', 'b' => 'b'];
     $auto = ['user' => ['__option__' => ['value_fill' => ['username', 'password', 'phone'], 'exists_fill' => 'nickname'], 'username' => ['strtolower', 'callback'], 'password' => ['md5', 'callback'], 'nickname' => [[&$this, 'fillName'], 'callback', 'cn_'], 'phone' => function ($value, $data) {
         echo $value;
         return trim($value);
     }, 'ab' => ['a,b', 'serialize'], 'cityid' => ['1', 'ignore'], 'address' => ['address'], 'integral' => 0, ['reg_time', 'time', 'callback'], ['login_time', function ($value, $data) {
         return $data['reg_time'];
     }]]];
     Config::set('auto', $auto);
     $result = Validate::fill($data, 'user');
     $data['nickname'] = 'cn_nickname';
     $data['phone'] = '123456';
     $data['ab'] = serialize(['a' => 'a', 'b' => 'b']);
     $data['address'] = 'address';
     $data['integral'] = 0;
     $data['reg_time'] = time();
     $data['login_time'] = $data['reg_time'];
     unset($data['cityid'], $data['a'], $data['b']);
     $this->assertEquals($data, $result);
 }
Exemple #13
0
 public function testVar()
 {
     Config::set('app_multi_module', true);
     $request = new Request();
     $request->route(['name' => 'thinkphp', 'id' => 6]);
     $request->get(['id' => 10]);
     $request->post(['id' => 8]);
     $request->put(['id' => 7]);
     $request->request(['test' => 'value']);
     $this->assertEquals(['name' => 'thinkphp', 'id' => 6], $request->route());
     //$this->assertEquals(['id' => 10], $request->get());
     $this->assertEquals('thinkphp', $request->route('name'));
     $this->assertEquals('default', $request->route('test', 'default'));
     $this->assertEquals(10, $request->get('id'));
     $this->assertEquals(0, $request->get('ids', 0));
     $this->assertEquals(8, $request->post('id'));
     $this->assertEquals(7, $request->put('id'));
     $this->assertEquals('value', $request->request('test'));
     $this->assertEquals('thinkphp', $request->param('name'));
     $this->assertEquals(6, $request->param('id'));
     $this->assertFalse($request->has('user_id'));
     $this->assertTrue($request->has('test', 'request'));
     $this->assertEquals(['id' => 6], $request->only('id'));
     $this->assertEquals(['name' => 'thinkphp', 'lang' => 'zh-cn'], $request->except('id'));
     $this->assertEquals('THINKPHP', $request->param('name', '', 'strtoupper'));
 }
Exemple #14
0
 public function testBuildAnchor()
 {
     Route::get('blog/:id', 'index/blog');
     Config::set('url_html_suffix', 'shtml');
     $this->assertEquals('/blog/10.shtml#detail', Url::build('/blog/10#detail'));
 }
Exemple #15
0
defined('CONF_EXT') or define('CONF_EXT', EXT);
// 配置文件后缀
defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_');
// 环境变量的配置前缀
// 环境常量
define('IS_CLI', PHP_SAPI == 'cli' ? true : false);
define('IS_WIN', strpos(PHP_OS, 'WIN') !== false);
// 载入Loader类
require CORE_PATH . 'Loader.php';
// 加载环境变量配置文件
if (is_file(ROOT_PATH . '.env')) {
    $env = parse_ini_file(ROOT_PATH . '.env', true);
    foreach ($env as $key => $val) {
        $name = ENV_PREFIX . strtoupper($key);
        if (is_array($val)) {
            foreach ($val as $k => $v) {
                $item = $name . '_' . strtoupper($k);
                putenv("{$item}={$v}");
            }
        } else {
            putenv("{$name}={$val}");
        }
    }
}
// 注册自动加载
\think\Loader::register();
// 注册错误和异常处理机制
\think\Error::register();
// 加载惯例配置文件
\think\Config::set(include THINK_PATH . 'convention' . EXT);
Exemple #16
0
 protected function setUp()
 {
     Config::set('app_multi_module', true);
 }
Exemple #17
0
 public function testSave()
 {
     $config = $this->getConfig();
     $order_model = new Model('order', $config);
     $data = ['id' => '1', 'total' => '180.50', 'status' => 1, 'create_time' => time(), 'about' => ''];
     \think\Config::set('db_fields_strict', false);
     $info = $order_model->where(['id' => 1])->map('amount', 'total')->find();
     $flag = $user_id = $order_model->map(['total' => 'amount'])->filter('trim')->save($data);
     $this->assertSame(1, $flag);
     \think\Config::set('db_fields_strict', true);
     $data = ['status' => 1];
     $flag = $order_model->where(['id' => 2])->setField($data);
     $this->assertSame(1, $flag);
     $flag = $order_model->where(['amount' => ['lt', 200]])->setField('freight_fee', 15);
     $this->assertSame(1, $flag);
     $map = ['amount' => ['gt', 300], 'freight_fee' => ['gt', 0]];
     $flag = $order_model->where($map)->setDec('freight_fee', 5, 30);
     $this->assertTrue($flag);
     $flag = $order_model->where($map)->setInc('freight_fee', 5, 30);
     $this->assertTrue($flag);
     $flag = $order_model->where($map)->setDec('freight_fee', 5);
     $this->assertSame(1, $flag);
     $flag = $order_model->where($map)->setInc('freight_fee', 5);
     $this->assertSame(1, $flag);
     $ru_model = new Model('role_user', $config);
     $data = ['user_id' => 1, 'role_id' => 1, 'remark' => 'remark'];
     $info = $ru_model->where(['user_id' => 1])->find();
     $flag = $ru_model->data($data)->save();
     $this->assertSame(1, $flag);
 }
Exemple #18
0
 /**
  * 获取和设置配置参数
  * @param string|array  $name 参数名
  * @param mixed         $value 参数值
  * @param string        $range 作用域
  * @return mixed
  */
 function config($name = '', $value = null, $range = '')
 {
     if (is_null($value) && is_string($name)) {
         return 0 === strpos($name, '?') ? Config::has(substr($name, 1), $range) : Config::get($name, $range);
     } else {
         return Config::set($name, $value, $range);
     }
 }
Exemple #19
0
 public function testSet()
 {
     $range = '_test_';
     $reflectedClass = new ReflectionClass('\\think\\Config');
     $reflectedPropertyConfig = $reflectedClass->getProperty('config');
     $reflectedPropertyConfig->setAccessible(true);
     $reflectedPropertyConfig->setValue([]);
     // if (is_string($name)):
     // without dot syntax
     $name = 'name';
     $value = 'value';
     Config::set($name, $value, $range);
     $config = $reflectedPropertyConfig->getValue();
     $this->assertEquals($value, $config[$range][$name]);
     // with dot syntax
     $name = 'one.two';
     $value = 'dot value';
     Config::set($name, $value, $range);
     $config = $reflectedPropertyConfig->getValue();
     $this->assertEquals($value, $config[$range]['one']['two']);
     // if (is_array($name)):
     // see testLoad()
     // ...
     // test getting all configurations...?
     // return self::$config[$range]; ??
     $value = ['all' => 'configuration'];
     $reflectedPropertyConfig->setValue([$range => $value]);
     $this->assertEquals($value, Config::set(null, null, $range));
     $this->assertNotEquals(null, Config::set(null, null, $range));
 }
Exemple #20
0
 /**
  * 应用程序初始化
  * @access public
  * @return void
  */
 public static function init()
 {
     // 设置系统时区
     date_default_timezone_set(Config::get('DEFAULT_TIMEZONE'));
     // 定义当前请求的系统常量
     define('NOW_TIME', $_SERVER['REQUEST_TIME']);
     define('REQUEST_METHOD', $_SERVER['REQUEST_METHOD']);
     define('IS_GET', REQUEST_METHOD == 'GET' ? true : false);
     define('IS_POST', REQUEST_METHOD == 'POST' ? true : false);
     define('IS_PUT', REQUEST_METHOD == 'PUT' ? true : false);
     define('IS_DELETE', REQUEST_METHOD == 'DELETE' ? true : false);
     define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' || !empty($_POST[Config::get('VAR_AJAX_SUBMIT')]) || !empty($_GET[Config::get('VAR_AJAX_SUBMIT')]) ? true : false);
     // URL调度结束标签
     Tag::listen('url_dispatch');
     // TODO: 删除页面压缩功能,改为使用Smarty进行页面压缩管理
     // 页面压缩输出支持
     // if(Config::get('OUTPUT_ENCODE')) {
     //     $zlib = ini_get('zlib.output_compression');
     //     if(empty($zlib)) {
     //         ob_start('ob_gzhandler');
     //     }
     // }
     // 系统变量安全过滤
     if (Config::get('VAR_FILTERS')) {
         $filters = explode(',', Config::get('VAR_FILTERS'));
         foreach ($filters as $filter) {
             // 全局参数过滤
             array_walk_recursive($_POST, $filter);
             array_walk_recursive($_GET, $filter);
         }
     }
     // 配置主题目录
     define('THEME_PATH', GROUP_PATH . 'Tpl/');
     // 缓存路径
     Config::set('CACHE_PATH', CACHE_PATH . GROUP_NAME . '/');
     // 动态配置 TMPL_EXCEPTION_FILE,改为绝对地址
     Config::set('TMPL_EXCEPTION_FILE', realpath(Config::get('TMPL_EXCEPTION_FILE')));
 }
Exemple #21
0
 /**
  * 初始化模块
  * @access private
  * @return void
  */
 private static function initModule($path, &$config)
 {
     // 加载初始化文件
     if (is_file($path . 'init' . EXT)) {
         include $path . 'init' . EXT;
     } else {
         // 检测配置文件
         if (is_file($path . 'config' . EXT)) {
             $config = Config::set(include $path . 'config' . EXT);
         }
         // 检测额外配置
         if ($config['extra_config_list']) {
             foreach ($config['extra_config_list'] as $conf) {
                 if (is_file($path . $conf . EXT)) {
                     $config = Config::set(include $path . $conf . EXT);
                 }
             }
         }
         // 加载应用状态配置文件
         if ($config['app_status'] && is_file($path . $config['app_status'] . EXT)) {
             $config = Config::set(include $path . $config['app_status'] . EXT);
         }
         // 加载别名文件
         if (is_file($path . 'alias' . EXT)) {
             Loader::addMap(include $path . 'alias' . EXT);
         }
         // 加载公共文件
         if (is_file($path . 'common' . EXT)) {
             include $path . 'common' . EXT;
         }
         // 加载行为扩展文件
         if (is_file($path . 'tags' . EXT)) {
             Hook::import(include $path . 'tags' . EXT);
         }
     }
 }
Exemple #22
0
 /**
  * @covers think\Response::error
  * @todo Implement testError().
  */
 public function testError()
 {
     // round 1
     $msg = 1001;
     $data = "data";
     Config::set('default_return_type', "json");
     $result = Response::error($msg, $data);
     $this->assertEquals($msg, $result["code"]);
     $this->assertEquals($data, $result["data"]);
     $this->assertEquals('javascript:history.back(-1);', $result["url"]);
     $this->assertEquals("json", Response::type());
     $this->assertEquals(3, $result["wait"]);
     // round 2
     $msg = "the msg";
     $url = "www.thinkphptesterror.com";
     $result = Response::error($msg, $data, $url);
     $this->assertEquals($msg, $result["msg"]);
     $this->assertEquals($url, $result["url"]);
     // round 3 异常在travis-ci中未能重现
     // $this->setExpectedException('\think\Exception');
     // FIXME 静态方法mock
     // $oMockView = $this->getMockBuilder('\think\View')->setMethods(array(
     // 'fetch'
     // ))->getMock();
     // $oMockView->expects($this->any())->method('fetch')->will($this->returnValue('content'));
     // Config::set('default_return_type', "html");
     // $result = Response::error($msg, $data, $url);
     // FIXME 静态方法mock
     // $this->assertEquals('content', $result);
 }
Exemple #23
0
 public function testRoot()
 {
     Config::set('url_domain_deploy', false);
     Config::set('url_common_param', false);
     Url::root('/index.php');
     Route::get('blog/:id', 'index/blog/read');
     Config::set('url_html_suffix', 'shtml');
     $this->assertEquals('/index.php/blog/10/name/thinkphp.shtml', Url::build('index/blog/read?id=10&name=thinkphp'));
 }
Exemple #24
0
 /**
  * Tears down the fixture, for example, closes a network connection.
  * This method is called after a test is executed.
  */
 protected function tearDown()
 {
     Config::set('default_ajax_return', $this->default_ajax_return);
     Config::set('default_return_type', $this->default_return_type);
 }
Exemple #25
0
 /**
  * 默认跳转操作 支持错误导向和正确跳转
  * 调用模板显示 默认为public目录下面的success页面
  * 提示页面为可配置 支持模板标签
  * @access private
  * @param string  $message 提示信息
  * @param Boolean $status  状态
  * @param string  $jumpUrl 页面跳转地址
  * @param mixed   $ajax    是否为Ajax方式 当数字时指定跳转时间
  * @return void
  */
 private function dispatchJump($message, $status = 1, $jumpUrl = '', $ajax = false)
 {
     if (true === $ajax || IS_AJAX) {
         // AJAX提交
         $data = is_array($ajax) ? $ajax : [];
         $data['info'] = $message;
         $data['status'] = $status;
         $data['url'] = $jumpUrl;
         $this->ajaxReturn($data);
     }
     // 模板变量
     $data = [];
     if (is_int($ajax)) {
         $data['waitSecond'] = $ajax;
     }
     if (!empty($jumpUrl)) {
         $data['jumpUrl'] = $jumpUrl;
     }
     // 提示标题
     $data['msgTitle'] = $status ? L('_OPERATION_SUCCESS_') : L('_OPERATION_FAIL_');
     $data['status'] = $status;
     // 状态
     //保证输出不受静态缓存影响
     Config::set('html_cache_on', false);
     if ($status) {
         //发送成功信息
         $data['message'] = $message;
         // 提示信息
         // 成功操作后默认停留1秒
         $data['waitSecond'] = '1';
         // 默认操作成功自动返回操作前页面
         if (!$jumpUrl) {
             $data["jumpUrl"] = $_SERVER["HTTP_REFERER"];
         }
         return $this->display(Config::get('success_tmpl'), $data);
     } else {
         $data['error'] = $message;
         // 提示信息
         //发生错误时候默认停留3秒
         $data['waitSecond'] = '3';
         // 默认发生错误的话自动返回上页
         if (!$jumpUrl) {
             $data['jumpUrl'] = 'javascript:history.back(-1);';
         }
         return $this->display(Config::get('error_tmpl'), $data);
     }
 }