本次更新点: 1.添加了扩展机制,可以自定义扩展 通过提供一个{$extensionname}context.php的类,在启动配置中将上述扩展添加到系统,则可以实现扩展功能 2.添加了rpc模块,pfinal_remoting_curl,提供基于权重的rr轮训调用策略 3.pfinalmodelabstract中添加
本次更新点:
1. 添加了扩展机制,可以自定义扩展
通过提供一个{$extensionname}context.php的类,在启动配置中将上述扩展添加到系统,则可以实现扩展功能
2. 添加了rpc模块,pfinal_remoting_curl,提供基于权重的rr轮训调用策略
3. pfinalmodelabstract中添加了数据库分布式策略,默认提供了一个masterslave策略,方便读写分离,可自行实现分库 pfinal setdevmode(pfinal_config_constant::mode_product); } /* (non-phpdoc) * @see pfinal_config_base::configroute() */ public function configroute(pfinal_config_route $me) { // todo auto-generated method stub } /* (non-phpdoc) * @see pfinal_config_base::configplugin() */ public function configplugin(pfinal_config_plugin $me) { // todo auto-generated method stub $conf = array( 'master'=>array( array('host'=>'127.0.0.1','port'=>3306,'user'=>'root','database'=>'test','passwd'=>'121'), array('host'=>'127.0.0.1','port'=>3306,'user'=>'root','database'=>'test','passwd'=>'567'), ), 'slave'=>array( array('host'=>'127.0.0.1','port'=>3306,'user'=>'root','database'=>'test','passwd'=>'aaa'), array('host'=>'127.0.0.1','port'=>3306,'user'=>'root','database'=>'test','passwd'=>'bbb'), ), ); $dbtest = new pfinal_plugin_dbconnection(new pfinal_model_proxy_masterslave($conf)); $active = new pfinal_plugin_activerecord(); $active->add('test', $dbtest); $me->add($dbtest); $me->add($active); } /* (non-phpdoc) * @see pfinal_config_base::configextension() */ public function configextension(pfinal_config_extension $me) { // todo auto-generated method stub $me->addextension(lib.directory_separator.'common'); } /* (non-phpdoc) * @see pfinal_config_base::configinterceptor() */ public function configinterceptor() { // todo auto-generated method stub } /* (non-phpdoc) * @see pfinal_config_base::confighandler() */ public function confighandler() { // todo auto-generated method stub } }
adapter = $adapter; if (isset($dbconf['master'])&&!empty($dbconf['master'])){ foreach ($dbconf['master'] as $conf){ $this->cacheconnection($conf,$this->masteradapters); } } if (isset($dbconf['slave'])&&!empty($dbconf['slave'])){ foreach ($dbconf['slave'] as $conf){ $this->cacheconnection($conf,$this->slaveadapters); } } } /* (non-phpdoc) * @see pfinal_model_proxy_strategy::getadapterproxy() */ public function getadapterproxy(pfinal_model_statement $stm) { // todo auto-generated method stub if ($stm instanceof pfinal_model_selector){ shuffle($this->slaveadapters); $adapter = end($this->slaveadapters); } if ($stm instanceof pfinal_model_update || $stm instanceof pfinal_model_insert || $stm instanceof pfinal_model_ddl){ shuffle($this->masteradapters); $adapter = end($this->masteradapters); } return $adapter; } protected function cacheconnection($conf,&$pool){ if (!is_array($pool)){ $pool = array(); } $host = $conf['host']; $port = $conf['port']; $user = $conf['user']; $passwd = $conf['passwd']; $database = $conf['database']; $instance = null; switch ($this->adapter){ case 'mysql': default: $instance = new pfinal_model_adapter_rmdbs(); $instance->init($conf); break; } if (null===$instance){ throw new pfinal_exception_argument(unknow adaptername:{$this->adapter}, -1); } $key = md5(sprintf('%s:%s:%s:%s:%s',$host,$port,$user,$passwd,$database)); $pool[$key] = $instance; } }
databasename = 'test'; parent::__construct($ormenable); } public function add(){ $this ->set('id', 3) ->set('name', stringutil::mysqlescapestring(adad'\\\n231')) ->save(); } public function getxx($id){ return $this->findbyid($id); }}
