吐槽下 php 几个框架,都是实际项目中用过的,欢迎有使用经验人的喷

2014-08-20 18:07:25 +08:00
 sheldondai
首先说下轻量经的框架
thinkphp和ci是我使用的过的两个轻量级框架,但这两个框架缺点都很明显,就是简陋,
这两个框架的bug都很多,我自己都碰到不少。tp是我刚毕业时用的,用了两年,也和tp的作者一起工作过,算是深度用户了。
1.tp和ci的开发和测试估计都没有在nginx下测试过,我在nginx跑,ci的路由有bug。
2.ci还有个明显的设计问题,而且竟然存在了很久,那就是在 index.php里面,当是production环境就
会关闭错误信息error_reporting(-1);这个错误一直存在了很久,最近才被fixed,真是奇怪这么显明的问题,竟然存在这么久。
3.tp和ci都只能做小项目,对多人合作方面,测试方面都考虑的很少。
4.开发过还遇到过若干小bug,这里就列举了,有些问题记不太清了。
5.这两个框架的中文文档都做的是一级棒。

再说说yii框架吧,yii框架最让我叫觉的我就想就是它的gii吧,分分钟做出个简单的后面管理demo,
不过我吐槽的就是这个,gii生成的代码使用的是widget,这个widget把view层和数据层紧紧的包裹在一起,不只是前端开发人员修改困难,就是后端开发也要查半天文档了才能修改。
当时发现好不容易修改好一个,下一个看似简单的需求,又得查半天文档才能修改好。

举个例子。列表页面一般都是zii.widgets.grid.CGridView这个widget,当你对生成的代码暗自高兴的时间,一个需求来了,列表中的某一列的label需要动态显示。但是你看代码,zii的label是死的,不能写php代码,为了这个需要我只能改了框架里的CGridView,yii里面的代码大量使用了eval,所以在view层写代码会很难维护。类似这种
'url' => 'Yii::app()->createUrl("topic/create", array("id"=>$data->id,"type"=>1, "rtype"=>0))',代码会大量充斥在view层。当在大量细小的需要过来时,我现在当初使用gii省下的时间都被gii收回去了,
最后只能回归传统的foreach 出列表页。
yii还有问题就是代码风格混乱,有的地方缩进8个字符,有的4个, yii2在这方面已经改正了。


我心中的理想的开发大中型项目的框架是这样的
1. 代码风格在PSR-2以上。
2. 框架本身是低耦合的,并且用框架写的业务代码也是代耦合的。
3. 在console下也正常运行。
4. 友好的支持php_unit,要友好的支持php_unit,上面的2,3是必须的,框架本身也有做单元测试。
5. 一些基本的功能模块以bundle或module的形式提供。
12945 次点击
所在节点    PHP
47 条回复
wdlth
2014-08-20 20:58:17 +08:00
CI的路由怎么会在Nginx有问题?要么是Rewrite设置不对,要么是FastCGI的PATH_INFO分离设置不对。
生产环境屏蔽报错很正常,不然可能会泄露信息。

试了试HHVM对各框架的支持度还不错,不过调试就比较麻烦。
GTim
2014-08-20 20:58:36 +08:00
在我眼中,tp已经是一个复杂的框架了.

我用php这么久,一开始觉得zf很好,然后觉得yii很好,然后觉得tp很好,最后,我只追求一个结构了
sheldondai
2014-08-20 21:05:50 +08:00
@master 用的不多的没敢提
sheldondai
2014-08-20 21:09:38 +08:00
@wdlth 生产环境需要做的是display_error=false,而不是关闭error_reporting.
baocaixiong
2014-08-20 21:11:22 +08:00
主要感觉yii的Gridview基本相当于重学了一个yii语言了。
maddot
2014-08-20 21:14:29 +08:00
"zii的label是死的,不能写php代码"。

对这个有疑问
楼主是指每一列的列名吗?“zii的label是死的”指的是zii不对“header"进行eval?显然对于列名这是不必要的,因为列名不需要用每一行的值来确定,也就是它的动态化与一行的数据是没关系的。
sheldondai
2014-08-20 21:15:53 +08:00
@barbery phalcon性能优秀而且设计上也很赞,不过要是框架本身有bug的话,对我这种对php扩展开发不怎么熟悉的人算是黑盒了。
sheldondai
2014-08-20 21:30:34 +08:00
@maddot 不是说的header。你可以看zii/widgets/grid/CButtonColumn.php里面的renderButton方法。
wdlth
2014-08-20 21:32:38 +08:00
@sheldondai 问题是php.ini不是所有的环境都能改的,比如虚拟主机,有的地方也限制ini_set。
maddot
2014-08-20 21:42:17 +08:00
@sheldondai

可以的吧,不需要不去修改框架代码,看了一下代码,默认的button的LABEL是写死了的,但是还是可以覆盖的

foreach(array('view','update','delete') as $id)
{
$button=array(
'label'=>$this->{$id.'ButtonLabel'},
'url'=>$this->{$id.'ButtonUrl'},
'imageUrl'=>$this->{$id.'ButtonImageUrl'},
'options'=>$this->{$id.'ButtonOptions'},
);
if(isset($this->buttons[$id]))
$this->buttons[$id]=array_merge($button,$this->buttons[$id]);
else
$this->buttons[$id]=$button;
}
maddot
2014-08-20 21:51:54 +08:00
不好意思,看得不够仔细,你是指button的LABEL不能EVAL,但是具有相同行为的Button需要不同的LABEL的需求还是比较个性化的,所以要求你自己去继承框架代码来实现,没有什么好批评的吧,YII的一大优点是他的组件机制让你能方便改变框架的各种功能行为
mahone3297
2014-08-20 22:11:06 +08:00
lz说的问题,确实存在。
我这边用symfony,你说的问题,我看过symfony相关的文档,symfony提供的解决方案是,可以overwrite。
我认为symfony和yii应该还是比较类似的,laravel应该也差不多。
codingpp
2014-08-20 22:33:35 +08:00
laravel大法好,退yii保平安
jarlyyn
2014-08-20 23:45:48 +08:00
觉得yii最好用的是缓存和url rewrite.
gii做过两个项目后就不用了。
konakona
2014-08-21 04:27:30 +08:00
@trimleo 关注。
jianghu52
2014-08-21 09:07:47 +08:00
在我这种只会用cakephp+smarty的人来说,你们说的东西都太高端了。
ksc010
2014-08-21 09:17:25 +08:00
用tp几个月 了 不爽的就是它的模版系统
lizhijun
2014-08-21 09:31:38 +08:00
不得不说CI的中文文档和社区支持很给力
Rabbit52
2014-08-21 11:42:14 +08:00
laravel 的性能还是有点捉急,symfony2 的曲线太陡,Phalcon 如上有黑盒的赶脚~
ren2881971
2014-08-22 08:34:01 +08:00
tp和ci 都简单用过。 觉得ci不错~ 野生phper路过。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129003

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX