热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

学习思路之ONETHINK

前段时间,ThinkPHP的整体设计思路,包括各个模块的实现。TP官方为了测试该框架,写了一个ONEThink,是可以学习下的不太推荐使用这个,感觉就是测试性质。但是你可以体会下他的设

前段时间,ThinkPHP 的整体设计思路,包括 各个模块的实现。

TP官方为了测试该框架,写了一个ONEThink,是可以学习下的


不太推荐使用这个,感觉就是测试性质。但是你可以体会下他的设计思路,继续深化思考,就可以重新写一个适合自己的。


比如:测试各种环境,用数组组合一下数据信息

$items = array(        'os'      => array('操作系统', '不限制', '类Unix', PHP_OS, 'success'),
        'php'     => array('PHP版本', '5.3', '5.3+', PHP_VERSION, 'success'),
        'upload'  => array('附件上传', '不限制', '2M+', '未知', 'success'),
        'gd'      => array('GD库', '2.0', '2.0+', '未知', 'success'),
        'disk'    => array('磁盘空间', '5M', '不限制', '未知', 'success'),
    );

然后可以利用引用来实现数据的实时更改

foreach ($items as &$val)

再比如:自动化的一些思路,写好一部分配置文件或者SQL语句或者输出文件的模板,然后替换一部分信息

conf.tpl

 // +----------------------------------------------------------------------/** * 系统配文件 * 所有系统级别的配置 */return array(    /* 模块相关配置 */    'AUTOLOAD_NAMESPACE' => array('Addons' => ONETHINK_ADDON_PATH), //扩展模块列表    'DEFAULT_MODULE'     => 'Home',    'MODULE_DENY_LIST'   => array('Common','User','Admin','Install'),    //'MODULE_ALLOW_LIST'  => array('Home','Admin'),    /* 系统数据加密设置 */    'DATA_AUTH_KEY' => '[AUTH_KEY]', //默认数据加密KEY    /* 用户相关设置 */    'USER_MAX_CACHE'     => 1000, //最大缓存用户数    'USER_ADMINISTRATOR' => 1, //管理员用户ID    /* URL配置 */    'URL_CASE_INSENSITIVE' => true, //默认false 表示URL区分大小写 true则表示不区分大小写    'URL_MODEL'            => 3, //URL模式    'VAR_URL_PARAMS'       => '', // PATHINFO URL参数变量    'URL_PATHINFO_DEPR'    => '/', //PATHINFO URL分割符    /* 全局过滤配置 */    'DEFAULT_FILTER' => '', //全局过滤函数    /* 数据库配置 */    'DB_TYPE'   => '[DB_TYPE]', // 数据库类型    'DB_HOST'   => '[DB_HOST]', // 服务器地址    'DB_NAME'   => '[DB_NAME]', // 数据库名    'DB_USER'   => '[DB_USER]', // 用户名    'DB_PWD'    => '[DB_PWD]',  // 密码    'DB_PORT'   => '[DB_PORT]', // 端口    'DB_PREFIX' => '[DB_PREFIX]', // 数据库表前缀    /* 文档模型配置 (文档模型核心配置,请勿更改) */    'DOCUMENT_MODEL_TYPE' => array(2 => '主题', 1 => '目录', 3 => '段落'),);

然后写一部分替换

$conf = str_replace('[AUTH_KEY]',$auth,$conf);$user = str_replace('[AUTH_KEY]',$auth,$conf);

或者说起来的替换或者读取执行

//读取SQL文件    $sql = file_get_contents(MODULE_PATH . 'Data/install.sql');    $sql = str_replace("\r", "\n", $sql);    $sql = explode(";\n", $sql);    //替换表前缀    $orginal = C('ORIGINAL_TABLE_PREFIX');    $sql = str_replace(" `{$orginal}", " `{$prefix}", $sql);

再比如:TP的扩展最核心的就是Behavior

写一个tags.php

return array('app_init'=>array('Common\Behavior\InitHookBehavior'));

这样就可以使用你想用的组件来进行模板解析,各种权限管理,路由控制,应用的前置后置处理,一些横向切面的工具

这样就可以动态加进来很多组件,也就实现了扩展,你的框架的核心不在于组件,而是你如何让数据流动,组合,以及讲故事。这是程序最值得称赞地方

附录下他的InithookBehavior

class InitHookBehavior extends Behavior{public function run(&$content){if(defined('BIND_MODULE') && BIND_MODULE === 'Install') return ;$data = S('hooks');if(!$data){$hooks = M('Hooks')->getField('name,addons');foreach ($hooks as $key => $value) {# code...if($value){$map['status'] = 1;$names = explode(',',$value);$map['name'] = array('in',$names);$data = M('Addons')->where($map)->getField('id,name');if($data){$addons = array_intersect($names, $data);Hook::add($key,array_map('get_addon_class',$addons));}}}S('hooks',Hook::get());}else{Hook::import($data,false);}}}//附加组件addons//由钩子去附件里面去找相应的组件


这就涉及到自动化运维的感觉,这就让人想起来python。


就写这么多吧,技术是属于每个人的,每个人的潜力不同,我们身边有很多人的兴趣点也是不一样的。照顾好自己的生活身体之后,前往顶峰。


愿法界众生,皆得安乐

本文出自 “一站式解决方案” 博客,请务必保留此出处http://10725691.blog.51cto.com/10715691/1963481


推荐阅读
  • 包含phppdoerrorcode的词条 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 本文介绍了一种利用PHP cURL库高效提取Sohu邮箱联系人列表的方法。通过设置错误报告级别、定义Cookie文件路径等关键步骤,确保了代码的稳定性和可靠性。经过实际测试,该方法在2012年3月24日被验证为有效,能够快速准确地获取联系人信息。此外,文章还提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
  • 本文为初学者提供了一条清晰的学习路线,帮助他们逐步成长为优秀的Web开发人员。通过十个关键步骤,涵盖从基础到高级的各个方面,确保每位学习者都能找到适合自己的学习方向。 ... [详细]
  • vsftpd配置(虚拟用户、匿名用户登录)
    一、ftp服务搭建(一)概述1.ftp连接及传输模式(1)控制连接TCP21,用于发送FTP命令信息 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom"echarts";4、如果用到map(地图),还 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
author-avatar
开着宝马X6去赶集_692
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有