的核心环节是从最初的请求路由分析到controller的分发,模型的数据交互到响应。使用其他框架会很繁琐,而且集成的内容太多,很多是不需要的,所以我参考其他框架写了一个简单实用的框架。先从路由说起:1)Routing路由协议的规则使用正则表达式匹配,将不同的链路分配给不同的控制器,也支持调用匿名函数//首先是使用匿名函数App::router()->get('/',function(){echo"BeautyFramework.";});//二、使用url分发到controllerApp::router()->post('/user/info/[0-9]+(/[0-9]+)?','App\Controllers\UserController@getUserInfo');其中实现的核心代码:(是不是很简单)if(is_string($lostrcallable)&&preg_match('!^([\a-zA-Z0-9]+)\@([a-zA-Z0-9]+)$!',$lostrcallable,$matches)){$class=$matches[1];$method=$matches[2];$callable=function()使用($class,$method){static$obj=null;如果($obj===null){$obj=new$class;}返回call_user_func_array(array($obj,$method),func_get_args());};}2)如果没有controller,你指向哪里就可以处理请求,但是按照MVC的说法,建议写在Controller中,大家都这么认为,那就照做吧;3)model层这里直接集成了Dao类进行数据库查询操作,因为现在很多都在用MySQL,MySQL的常规操作都是耦合实现的。因为原生操作数据库会造成很多注入等问题,所以没有办法直接支持Qquery。4)DAO层很多情况下需要读写分离,但是使用MySQLProxy实现起来过于繁琐,所以实现支持数据库查询根据不同的SQL分别使用主从数据库。你怎么做呢?直接按照不用的查询操作来划分。Select查询操作直接赋给读库,Insert、Update、Delete直接赋给写库。也可以直接使用onMasterConnection/onSlaveConnection直接指定。看Select是怎么做的,这部分是实现逻辑:/***获取查询内容并以数组的形式返回,数据为数组。**@accesspublic*@paraminteger|array$limit数组以Array($count,$offset)格式定义SQL限制*或仅$count**@returnmixedArrayofClients*/protectedfunctionget($limit=null){$this->dbClient->setQueryChannel($this->channel);$results=$this->dbClient->arrayBuilder()->get($this->dbTable,$limit,$this->fields);$this->_reset();如果($this->dbClient->count==0){return[];}返回$结果;}5)配置类在开发环境和生产环境会使用不同的配置Environment,可以在framework中创建.env环境来切换。在config中可以常规设置development和production,使用哪个环境可以在.env中设置;这是一个环境配置文件environment=development当然还有一些公共的配置信息,可以直接在config文件中设置,这样就可以在什么环境下使用。//支持使用.connection访问配置项,访问configkey\Beauty\Core\App::config()->get("app.config");在config/app.php中;6)请求响应不需要View,只需要返回json数据,所以直接在Header中写text/json。==其他人实现memcache和redis使用一致性哈希来访问不同的实例。validator验证类的具体代码在githubhttps://github.com/tigerk/Beauty
