CakePHP3.2 api 之读写分离
2016-06-21 11:52
513 查看
作为API的cake3.2,做项目时就需要把数据的读和写分离开,然后cakephp自带的两种获取配置的方法,简单介绍两种方法
2.TableRegistry::get('tg_*')
而对于这种方法是与model进行绑定,但是这样框架里默认获取的app.php中的defaule的默认配置,而做到模块化开发,又想读写分离就得改动框架内部的底层代码
1.ConnectionManager::get('write*)
这种方法是直接获取app.php里的配置'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => '', //'port' => 'non_standard_port_number', 'username' => '', 'password' => '', 'database' => '', 'encoding' => 'utf8', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false ] ]get()方法内写的是数据配置key
2.TableRegistry::get('tg_*')
而对于这种方法是与model进行绑定,但是这样框架里默认获取的app.php中的defaule的默认配置,而做到模块化开发,又想读写分离就得改动框架内部的底层代码1.程序路径
首先找到\vendor\cakephp\cakephp\src\ORM\Locator 下的TableLocator.php LocatorInterface.php2.修改源代码
LocatorInterface.php 中的get方法修改为public function get($alias, array $options = []);TableLocator.php 中的get方法修改为
public function get($alias, array $options = [],$config='') { if (isset($this->_instances[$alias])) { if (!empty($options) && $this->_options[$alias] !== $options) { throw new RuntimeException(sprintf( 'You cannot configure "%s", it already exists in the registry.', $alias )); } return $this->_instances[$alias]; } $this->_options[$alias] = $options; list(, $classAlias) = pluginSplit($alias); $options = ['alias' => $classAlias] + $options; if (isset($this->_config[$alias])) { $options += $this->_config[$alias]; } if (empty($options['className'])) { $options['className'] = Inflector::camelize($alias); } $className = $this->_getClassName($alias, $options); if ($className) { $options['className'] = $className; } else { if (!isset($options['table']) && strpos($options['className'], '\\') === false) { list(, $table) = pluginSplit($options['className']); $options['table'] = Inflector::underscore($table); } $options['className'] = 'Cake\ORM\Table'; } if (empty($options['connection'])) { $connectionName = $options['className']::defaultConnectionName(); if(empty($config)){ $options['connection'] = ConnectionManager::get($connectionName); }else{ $options['connection'] = ConnectionManager::get($config); } } $options['registryAlias'] = $alias; $this->_instances[$alias] = $this->_create($options); if ($options['className'] === 'Cake\ORM\Table') { $this->_fallbacked[$alias] = $this->_instances[$alias]; } return $this->_instances[$alias]; }这样在调用TableRegistry::get('tg_*','write')这样就可以获取写的配置了,如果不传第二个参数,就可以默认是default
相关文章推荐
- 一个关于if else容易迷惑的问题
- Android Manifest 用法
- Android Native 绘图方法
- 什么是 GraphQL?
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- Spark RDD API详解(一) Map和Reduce
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- Spring Boot 开发微服务
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- lwn拾遗:[sn3218 led drivers]-api解释-1
- 页面元素查找之Selectors API
- Php Installing An Expansion
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- php7 读取php.ini[4]
- 一个小型js框架myJSFrame附API使用帮助