radiosilence / ham
PHP微框架,适用于您喜欢的任何东西。
dev-master
2015-07-03 09:43 UTC
Requires
- php: >=5.3
Suggests
- ext-apc: Either XCache or APC is required. XCache is preferred.
- XCache (http://xcache.lighttpd.net/): Either XCache or APC is required. XCache is preferred.
This package is not auto-updated.
Last update: 2024-09-10 02:58:47 UTC
README
现在包含测试!
PHP微框架,适用于您喜欢的任何东西。基本上就是一个快速的具有良好语法的路由器,以及一个缓存单例。我会继续添加更多功能,比如可能是一个扩展系统、自动加载器以及一些其他功能,以使PHP开发比现在更愉快。
路由将被转换为正则表达式并缓存,因此这个过程不需要在每次请求时都发生。此外,针对给定URI解析的路由也会被缓存,所以在大多数请求中不需要进行正则表达式匹配。
现在还可以在应用程序的路由内挂载应用程序,因此可以创建一个管理员应用程序,然后在主应用程序的/admin上挂载它。
PHP面临着一个有趣的挑战,因为它由于架构的原因,每次请求都必须重新执行所有操作,这就是为什么我利用缓存和微小的TTL来共享请求间操作的结果,如路由解析。
注意:PHP已经具有许多微框架所具有的功能,例如会话处理、cookies和模板。本项目的一个目标是尽可能鼓励使用原生功能,或者在其良好的地方对其进行改进,但使一些部分更易于使用或扩展,以达到我喜欢的水平。
注意:为了获得最大的速度提升,请使用XCache扩展,因为它支持闭包的缓存,而APC则不支持。
目标
- 尽可能将所有与I/O相关的操作缓存起来,使用XCache/APC(无论哪个已安装),以防止在大量请求中过度使用磁盘或路径搜索。
- 提供一个简洁的语法,意味着更少的魔法和更少的代码要阅读和学习,而不牺牲速度或代码长度,通过使用原生PHP方法和功能。
- 促进一种简单、平坦的构建应用程序的方法,这些应用程序不需要大量的抽象层次。
- 鼓励使用像Doctrine这样的优秀第三方库,以防止开发人员编写混乱的、难以维护的代码,让人们像我这样的人必须花几个小时仔细阅读才能理解究竟发生了什么。
- 定义和记录开发模式,使新开发人员能够快速入门并编写新的非侵入性代码。
完全受Flask的启发。
要求
- PHP 5.3
- XCache(推荐)或APC(仍然可选)
- 指向您放置应用程序的文件的请求(例如,index.php)。
Hello World
require '../ham/ham.php'; $app = new Ham('example'); $app->route('/', function($app) { return 'Hello, world!'; }); $app->run();
更有趣的示例
require '../ham/ham.php'; $app = new Ham('example'); $app->config_from_file('settings.php'); $app->route('/pork', function($app) { return "Delicious pork."; }); $hello = function($app, $name='world') { return $app->render('hello.html', array( 'name' => $name )); }; $app->route('/hello/<string>', $hello); $app->route('/', $hello); $app->run();
多个应用程序挂载在路由上!
require '../ham/ham.php'; $beans = new Ham('beans'); $beans->route('/', function($app) { return "Beans home."; }); $beans->route('/baked', function($app) { return "Yum!"; }); $app = new Ham('example'); $app->route('/', function($app) { return "App home."; }); $app->route('/beans', $beans); $app->run();
自定义错误处理
require 'ham/ham.php'; $beans = new Ham('beans'); $beans->route('/', function($app) { return "Beans home."; }); $app->onError(function(){ return "Burnt Bacon."; }, "Error message can go here."); $app->run();
输出
/beans/
Beans首页。
/beans/baked
美味!
/
应用程序首页。
/definitely_not_the_page_you_were_looking_for
烤培培根。
查看示例应用程序以获取更多详细信息。
待办事项
- 漂亮的日志类和具有错误级别、电子邮件等的日志支持。
- 子应用程序挂载(类似于Flask "Blueprints")。
- 净化解决方案。
- CSRF令牌
- 扩展API
扩展想法
- 表单生成(第三方?Phorms)
- ORM集成(最可能是Doctrine)
- 身份验证模块(使用scrypt或其他)
- 管理扩展