豌豆框架0.6正式发布

programmerhuang 2010-02-15 09:16:12
豌豆框架(英文名叫Wonderful Framework): 是一个PHP开发框架, 支持PHP5以上版本, 它是免费的, 开源的, 是基于BSD协议发行的.
是具有灵活的, 可扩展的, 可配置的, 组件化的框架结构. 采用面向对象的设计理念, 同时又支持传统的面向过程的, 在HTML中直接嵌入PHP代码的开发方式.
支持MVC模式, 能让程序员更好的与美工合作, 甚至美工不需要会PHP.
PhpTagLib, Action等等, 这些技术能开发者更好的开发出强大的分层设计构架.
集成有单元测试/对象模仿功能, 还有依赖注入构架, 更好的支持敏捷开发.
框架多处参考了JAVA中的技术, 并对这些技术更一步发挥.
框架还有很多不足之处, 还需不断完善, 欢迎多提意见, 如有什么问题, 请向我们反馈. 欢迎你的参与!

特点:
* 灵活, 扩展性强, 复用性高, 完全采用面向对象设计, 并带有一些有用的类库.
* 依赖注入, 实现了IoC构架, 为开发者更好的降低类的依赖性.
* 地址映射, 这是框架的基础, 开发者可以自己定义匹配地址, 并映射到专门的类中运行.
* 标签引擎, PhpTagLib是框架中重要的MVC实现, 允许开发者定义像HTML/XML这样的标签, 实现组件化开发.
* Action模块, 强大的数据处理构架, 支持采用标签方式调用, 支持多个Action合并使用.
* 迭代器, 扩展增强PHP的迭代器(Iterator)接口, 并融合进框架中的其它模块.
* 数据库, 对PEAR DB的重新封装, 支持同时连接多个数据库, 并提供通过标签直接查询.
* 分页类, 数据分页和分页导行分开, 可更好的扩展分页, 基于迭代器可以对任何数据的迭代器分页.
* 缓存, 提供统一的缓存构架, 开发者可以方便的扩展, 支持通过缓存标签缓存页面中的内容.
* 测试引擎, 支持TDD开发方法, 敏捷开发的必需品, 支持单独运行一个测试用例, 也支持运行测试组.
* 对象模仿, 不仅可以Mock指定的类/接口, 还可以Mock父类以分离父类进行测试.
* PlainObject, 支持写一个普通的类, 不继承任何类, 不实现任何接口, 可直接用做标签类或Action类使用.
* 传统页面, 可以直接访问传统的PHP页面, HTML页面, 图片, 脚本等等文件.
* 单一入口, 可以在入口程序中设置框架环境.
* 调试, 支持更详细的错误/异常提供, 支持提示环境中的一些信息.
* XML格式的配置文件, 使配置更直观, 灵活.
* 自带有PEAR中的一些基本和常用的类库.
* 免费的, 开源的. 使用BSD开源协议发行, 你可以用在任何项目中.

框架网站: http://www.wonderfulproject.cn
Google Code: http://code.google.com/p/wonderfulframework

示例: http://www.wonderfulproject.cn/door.php/example.php

相关文章:
PhpTagLib的MVC分层设计
迭代器(Iterator)和分页(Page)类库介绍
框架中Action的特性: 组件和组合
在框架中使用FCKEditor

趁过年时, 有些时间发布个新版本.
本框架主要定位在系统开发方面, 提供了些敏捷方面的技术.
随着框架在实际项目中不断应用和实践, 整体的构架已经趋向稳定, 且在易用性上也做了些改进.
将来框架会继续完善构架, 丰富各个库(类库, 标签库, Action库, Validator库), 增强易用性, 增加控制平台, 提高效率等等方面.
...全文
429 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaozhen1990 2010-03-22
  • 打赏
  • 举报
回复
自由框架.. . . ..
programbin 2010-03-15
  • 打赏
  • 举报
回复
楼主可以看看 YII 框架. 几乎只能用完美来形容了.
如果楼主可以开发出一个比它更好的.
我第一个用.
fxs_2008 2010-03-15
  • 打赏
  • 举报
回复

up 一个










tabris17 2010-03-05
  • 打赏
  • 举报
回复
引用 24 楼 quzhongxiong 的回复:
原生PHP开发,要用框架选ZF,至于所谓的豌豆框架...............


我觉得zf不如Symfony
我发现thinkphp不错,够轻量,够快速
quzhongxiong 2010-03-05
  • 打赏
  • 举报
回复
原生PHP开发,要用框架选ZF,至于所谓的豌豆框架...............
YHL27 2010-03-03
  • 打赏
  • 举报
回复
最近研究yii框架,也没接触过其他框架
programmerhuang 2010-03-03
  • 打赏
  • 举报
回复
s_title, 谢谢你的肺腑之言.
的确, 在PHP界谈设计, 特别是OOD, 基本是很少人会关注. 可能是PHPer基本习惯的那些简单的开发了.
其实框架也不禁止使用echo, 只是对重视OO的人来说, 有response这样的封装和扩展会更好一些. 其实ZF中也有这些啦. 呵呵.
我的框架一个特点就是允许传统的PHP编程方式.
s_title 2010-03-02
  • 打赏
  • 举报
回复
哈哈,php版ssh 不错。 不过就是觉得太java了。

我觉得应该多用用php的语言特性。 把这个搞得php点。 不然我估计很多的phper应该是没什么意图的。

毕竟过程式编程,他们非常的习惯了。 比如说 $this->response->writeln这个, 我相信绝大部分人更愿意

echo ; 毕竟要少敲好多字符。 ssh毕竟是java的。 ssh是在java里实现飞ioc mvc aop orm

在php可能会有更简洁,更好的表现形式。肺腑之言。希望楼主不要建意。

tank_2009 2010-02-23
  • 打赏
  • 举报
回复
programmerhuang 2010-02-23
  • 打赏
  • 举报
回复
> __autoload不会弹出错误
> 还把问题统一起来

uuq, 是不是phpchina那边的huanguuq.
谢谢你的关注.
我也是一个框架作者, 不便对其它构架做评论.
但做为开发者, 我更希望在开发阶段把潜在在的问题(错误/警告)提示出来, 而不是隐藏了, 这对系统的稳定性和可靠性是一种帮助.
而在正式发布挂到网上时, 可以把这些错误记录, 但不提示.
garcon1986 2010-02-23
  • 打赏
  • 举报
回复
学习学习学习~~~~~~~~~~~
骄傲青蛙 2010-02-22
  • 打赏
  • 举报
回复
貌似框架有过多的限制。。。
  • 打赏
  • 举报
回复
我认为大部分PHP框架是将简单的问题复杂化。
  • 打赏
  • 举报
回复
哈哈,很适合初学者。

。不过我不喜欢框架。
uuq 2010-02-22
  • 打赏
  • 举报
回复
__autoload不会弹出错误
还把问题统一起来
uuq 2010-02-22
  • 打赏
  • 举报
回复
那使用where条件
tabris17 2010-02-22
  • 打赏
  • 举报
回复
稍微简单了一点,如果要获取userid和language大于1和小于5的对象该怎么办?
uuq 2010-02-22
  • 打赏
  • 举报
回复
楼主可以看看我的框架
http://code.google.com/p/queryphp/
这个一个微型框架
可以实现MVC方式

支持path_info方式

控制动作在router目录下面
/default/index
调用router目录下面defaultRouter.class.php文件
取得类后调用index方式
J()是index方法跳转
R()是由控制
C()是生成类
M()是数据库类模型 数据库链接在model.function.php里面设置

只包括framework.php文件就可以了。

path_info方式
testframework.php?controller=default&action=index
testframework.php/default/index

可以使用apache重写 去掉testframework.php文件

可以自己设置路由规则
C("router")->ruleMaps("login",'/login/:id', array('controller' => 'auth', 'action' => 'login'));
那么会配匹testframework.php/login/5555
这样可以使用$_GET['id']得到5555;
'controller' => 'auth', 'action' => 'login'
是控制器和方法

其它设置
C("router")->ruleMaps('logout','/logout', array('controller' => 'auth', 'action' => 'logout'));
C("router")->ruleMaps('signup','/signup', array('controller' => 'auth', 'action' => 'signup'));
C("router")->ruleMaps('profile','/profile/:action', array('controller' => 'profile')); // will call controller "Profile" with dynamic method ":action()"
C("router")->ruleMaps('users','/users/:id', array('controller' => 'users'), array('id' => '[\d]{1,8}')); // define filters for the url parameters


数据库数据模型
使用方法

构造一个数据库表模型
$beian=M('beian');

自动填充aaa bbb字段 $_POST中也要有这两个字段
//$beian->autoField(array("aaa","bbbb"));
$data中填充
$beian->autoField($data,array("aaa","bbbb"));
取两个主键值,排序为升序
//print_r($beian->get(53,54,'asc'));

赋值给字段。
$beian->userid=2;
$beian->language=1;


打印已经赋值字段
//print_r($beian->data);

保存,再显示刚才插入的ID
//echo $beian->save()->pkid();

设置主键然后删除
//echo($beian->pkid(69)->delete());

取得表的行数
//echo $beian->Totalnum();

select显示两个字段,Arraylist为数组
//print_r($beian->getAll("userid,language")->record); //改为record了

查询两个userid和language为1和5,fetch为取值
print_r($beian->whereUseridAndLanguage('1','5')->fetch()->record);

取得两个主键,显示三个字段,升序
//print_r($beian->get('confid,userid,language',53,54,'asc')->record);

输出主键值
//echo $beian->confid;

更新某个表的字段累加1
$beian->colupdate('tplid');

可以在model目录下,*****Model.class.php文件里面添加方法。

生成模型后可以马上可以使用
print_r($booktype=M("booktype")->getAll());


更新J()跳函数
可以支持各个路由之间跳转和传递参数
参数为array
J("show") 为转到本路由方法show
J("show",array("id"=>555)) 为转到本路由方法show 并传递参数ID过去
J(R("member"),"list") 将跳转到member路由上面并调用list方法 如果没有list那么默认为index方法,具体框架中设置的默认方法。
J("member")
J("member","list",array("userid"=>999))


hasOne hasMany ManyhasMany ORM(Object-Relational Mapper) 对象关系影射有三种可以在"map"=>"hasOne"这里更改
<?php
class supplyModel extends supplyBase{
var $mapper=array("Books"=>array("map"=>"hasOne","TargetModel"=>"booktype","localFiled"=>"typeid","targetFiled"=>"typeid"));
var $maps;
}

$supply=M("supply");
$supply->get(3,4)->up();
echo ($supply->Books->classname);//自动取得Books中内容
print_r($supply->record);
echo $supply->Books->Supply->title; //反过来取supply中的内容
print_r(M("booktype")->record); //booktype中已有对像关系了
programmerhuang 2010-02-20
  • 打赏
  • 举报
回复
对于别名的申明, 我再具体想了一下, 如果申明在调用者那边, 应该是不对了, 反而相互依赖性更大了.
我想别名的申明可以放在配置文件里, 由调用者自己去申明, 就不会有上面的问题了.
这样反而加大了, 类包的灵活性. 如目录变更什么的, 也不会改动过大.
tabris17 2010-02-20
  • 打赏
  • 举报
回复
配置文件+类名前缀

Symfony的autoload就是这样的
加载更多回复(7)

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧